尽管映射,Ivy makepom 将所有依赖项标记为可选

Posted

技术标签:

【中文标题】尽管映射,Ivy makepom 将所有依赖项标记为可选【英文标题】:Ivy makepom marks all dependencies as optional despite mapping 【发布时间】:2016-09-26 06:38:14 【问题描述】:

给定:

<dependency org="foo" name="bar" />

并且没有配置,跟随ant sn -p:

<echo>$ivy.configuration</echo>
<ivy:makepom ivyfile="$build.dir/ivy.xml" pomfile="$build.dir/$ivy.module.pom">
  <mapping conf="default" scope="compile" />
</ivy:makepom>

产生对 foo.bar 具有可选依赖的 pom 并打印“默认”。 如果我将映射更改为conf="*",那么它可以工作但它显然不是最理想的

是否可以映射未​​指定的默认配置,或者我需要在 ivy.xml 中的所有依赖项上设置 conf="default" 吗?

【问题讨论】:

【参考方案1】:

可选的依赖映射似乎是默认行为。

Ivy 不限于固定数量的范围。虽然 ivy 配置更加灵活,但您不能假设每个配置都用于填充标准项目类路径....

最安全的做法是提供每个 ivy 配置到 Maven 中匹配范围的显式映射。在实践中,我建议创建一个 ivy 配置来模拟每个 Maven 范围(不管它是否被使用)。

   <target name="generate-pom" depends="resolve" description="Generate Maven POM">
      <ivy:deliver deliverpattern="$build.dir/ivy.xml" pubrevision="$project.version"/>

      <ivy:makepom ivyfile="$build.dir/ivy.xml" pomfile="$build.dir/$ivy.module.pom">
         <mapping conf="compile" scope="compile" />
         <mapping conf="runtime" scope="runtime" />
         <mapping conf="test"    scope="test" />
      </ivy:makepom>
   </target>

注意:

您省略了deliver ivy 任务。必须确保解决 ivy 动态修订并且 ivy 模块具有设置为预期发布修订号的修订标签。 (与 Maven 不同,您不需要编辑 ivy 文件来增加模块版本)。

【讨论】:

我后来发现 - 只映射 '*' 是安全的。【参考方案2】:

似乎映射“*”是无害的。任何其他特定映射仍将优先。

【讨论】:

以上是关于尽管映射,Ivy makepom 将所有依赖项标记为可选的主要内容,如果未能解决你的问题,请参考以下文章

Apache Ivy 排除依赖项的标记

如何将 Ivy 的依赖项添加到 Eclipse PDE 目标平台?

从 Ivy.xml 下载依赖项

Ivy - 将解析结果输出到 ivy 文件

如何使用 Sonatype Nexus 作为 Ivy 依赖项的镜像 [重复]

Ivy 解决了 Oracle JDBC 依赖项,但不部署具有其他依赖项的 jar