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

时间:2013-07-16 12:53:07

标签: ant ivy

假设:

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

并且没有配置,在ant snippet之后:

<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并打印“default”。 如果我将映射更改为conf="*",那么它的工作原理是,但它显然是次优的

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

2 个答案:

答案 0 :(得分:3)

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

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

最安全的做法是提供每个常春藤配置到Maven中匹配范围的显式映射。在实践中,我建议创建一个常春藤配置来模拟每个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常春藤任务。必须确保解决常春藤动态修订,并且常春藤模块的修订标记设置为预期的已发布修订版号。 (与Maven不同,您不需要编辑常春藤文件来增加模块版本。)

答案 1 :(得分:0)

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