尽管映射,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 将所有依赖项标记为可选的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Ivy 的依赖项添加到 Eclipse PDE 目标平台?