【问题标题】:Ivy makepom marks all dependencies as optional despite mapping尽管映射,Ivy makepom 将所有依赖项标记为可选
【发布时间】: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" 吗?

【问题讨论】:

    标签: ant ivy


    【解决方案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】:

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

    【讨论】:

      猜你喜欢
      • 2013-02-04
      • 2012-10-06
      • 2016-11-20
      • 2012-08-29
      • 2022-06-10
      • 1970-01-01
      • 2018-01-12
      • 2013-01-31
      相关资源
      最近更新 更多