我正在尝试在常春藤中设置冲突管理器,但我找不到如何设置它们的具体示例。例如,要设置“严格”管理器,这会是什么样的?
<conflict-managers>
???
</conflict-managers>
答案 0 :(得分:8)
<rant>
是的,不是常春藤文件!我的意思是,它必须组织良好,完整吗?它真的必须有意义吗?我的意思是,不像我的工作取决于它!
等一下,它确实......
</rant>
对不起,我必须把常春藤的文件放在胸前。相比之下,它使Maven文档看起来很精彩。
我发现的关于常春藤的最好的书是Manning的Ant in Action。这本已经七年历史的书已经绝版了(但仍然可以作为电子书使用。如果这本书没有,(使用Ivy 1.4),我本来就完全了不幸的是,它并没有深入研究常春藤设置。
常春藤文档深埋了listing of all of the possible conflict managers。
我还没有与他们玩过,但我相信你只是在ivy-settings.xml
中执行以下操作:
<conflict-managers>
<latest-revision/>
</conflict-managers>
您也可以在ivy.xml
中定义冲突管理,这可能会更加实用,因为它可以逐个模块地定义。
当然,一些例子可能会有很长的路要走,但是Ivy文档并没有提供很多。
答案 1 :(得分:3)
那是我。从那时起,Ivy已经发展了很多,所以有了构建我发现的关于常春藤的最好的书是曼宁的行动中的蚂蚁。
常春藤冲突管理者的一个问题是它与maven有所不同,maven的政策首先在图表上最浅,而且选择最接近的maven。如果你明确要求一个版本,这是好的,如果你有&gt; 1最近&#34;不是你想要的。
使用常春藤,你可以达到严格的决心,即“你必须明确解决你的依赖关系中的每一个冲突”#34;。这增加了额外的工作@构建时间,但有一个关键结果:如果你明确声明你想要的东西的版本,你现在可以控制你的类路径中的内容。
答案 2 :(得分:1)
Ivy参考文档严格遵循ivy.xml和ivy-settings.xml文件的XML标记结构。您需要直接从文档结构中提取所需的信息。
来自常春藤文档的解码: 冲突管理器标记用于声明项目可能使用的冲突管理器,如果接受配置则配置它们,而不是设置冲突管理器使用。
<conflict-managers>
<latest-cm name="mylatest-conflict-manager" latest="my-latest-strategy"/>
<compatible-cm name="my-latest-compatible-conflict-manager" latest="my-latest-strategy"/>
</conflict-managers>
settings标签有一个用于选择默认冲突管理器的属性:
<settings defaultConflictManager="strict"/>
或者在ivy.xml中:
<dependencies>
<dependency.../>
<conflict manager="strict">
</dependencies>
请注意,大多数冲突管理者在解释您的意图时比您预期的更自由。两个例子: *分支被认为是无关紧要的,如果在两个分支上有依赖关系,那么最近的分支是&#34;解析器系列将从两者中选择最新的。 *&#34;最新时间&#34;和#34;最新修订版&#34;解析器忽略版本约束,除了在匹配空间上设置边界。例如如果a取决于b-1.0和c-1.0但c-1.0依赖于b-5.0那么你将获得b-5.0,尽管它不符合要求的约束。 我认为您的需求是发现其中一个设计缺陷的结果。