Build 常春藤冲突解决方案不起作用

Build 常春藤冲突解决方案不起作用,build,ivy,dependency-management,conflicting-libraries,Build,Ivy,Dependency Management,Conflicting Libraries,我的模块A依赖于模块B和C,这两个模块都依赖于模块D的不同版本。我的常春藤依赖项如下所示: <ivy-module> <info organisation="com.a" module="A"/> <configurations defaultconf="runtime"> <conf name="runtime"/> </configurations> <dependencies> <depe

我的模块A依赖于模块B和C,这两个模块都依赖于模块D的不同版本。我的常春藤依赖项如下所示:

<ivy-module>
<info organisation="com.a" module="A"/>
<configurations defaultconf="runtime">
    <conf name="runtime"/>
</configurations>
<dependencies>    
    <dependency org="org.b" name="B" rev="2.0" conf="runtime->default" />    
    <dependency org="org.c" name="C" rev="2.4" conf="runtime->default" />
    <conflict org="org.d" module="D" rev="2.4"/>
</dependencies>
</ivy-module>

为什么冲突标签没有告诉Ivy使用模块D的2.4版?我希望使用严格的冲突解决方案,然后一次覆盖一个冲突,这样就可以清楚地知道我们在哪里冒着不使用另一个项目的pom/ivy中提到的依赖项版本的风险。将org.d的exclude添加到org.c依赖项中可以消除冲突,但在我看来,使用冲突标记对文件的未来读者来说更为清晰。

您还可以尝试为模块d设置force属性。这将迫使Ivy在本例中采用2.4:

<dependency org="org.d" module="D" rev="2.4" conf="runtime->default" force="true" />

我不确定这是否真的是一个答案,但我最终发现,如果我改变了依赖项的顺序,冲突标记就会逐出正确的依赖项。我重读了这本书,它确实说顺序很重要。但是,它并没有说明如何找出正确的顺序,所以用户可以尝试不同的依赖顺序,直到找到一个有效的顺序。
<dependency org="org.d" module="D" rev="2.4" conf="runtime->default" force="true" />