2012-12-12 222 views
3

我模塊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:retrieve] :: Apache Ivy 2.3.0-rc2 - 20121105223351 :: http://ant.apache.org/ivy/ :: 
... 
... 
[ivy:retrieve] :::: ERRORS 
[ivy:retrieve] org.d#D;2.3 (needed by [org.c#C;2.4]) conflicts with org.d#D;2.4 (needed by [org.b#B;2.0]) 

爲什麼不衝突的標籤告訴常青藤使用模塊d的2.4版本?我想使用嚴格的衝突解決方案,然後逐個重寫衝突,以便明確我們在哪裏冒着不使用另一個項目的pom/ivy中提到的依賴版本的風險。向org.c依賴項中添加org.d的排除可消除衝突,但在我看來,對於未來的讀者來說,使用衝突標記更爲明確。

+1

不知道這是一個真正的答案,但我沒有最終數字如果我切換了依賴關係的順序,那麼衝突標記會驅逐正確的依賴關係。我重新閱讀[衝突文檔](http://ant.apache.org/ivy/history/latest-milestone/ivyfile/conflict.html),它確實表明該順序很重要。但是,它沒有說明如何確定哪一個是正確的順序,所以用戶只需嘗試不同的依賴性順序,直到找到有效的順序。 – rzrelyea

回答

1

你也可以嘗試設置屬性爲模塊D.這將迫使常春藤採取2.4在這個例子:

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