2012-10-23 92 views
9

我有一個項目X,它在依賴關係層次結構中顯示了很多衝突的依賴關係(如Eclipse的依賴關係層次結構視圖中所示)。我看到很多的東西,如:Maven中是否存在衝突的傳遞依賴問題?

clojure: 1.3.0 (omitted for conflict with 1.4.0) [compile] 

這通常是由於二經X使用的庫的指定的其他庫的兩個不同版本 - 即衝突,因爲共享傳遞依賴的存在的。在不少情況下,衝突出現在我無法直接控制的第三方庫中。

幸運的是,現在一切都建立並運行良好,但我擔心這種情況是否會在未來造成問題。

這是一個我應該擔心的問題,如果是的話,我應該怎麼做呢?

+1

自從我的「XML和XML解析器冒險」我試圖緩解這些問題,即。至少TRY。一個庫取決於另一個版本的另一個版本,因爲另一個庫需要同一個庫的更新版本,所以這個庫會被忽略,這就像是一個執行得很好的版本。我通常嘗試管理衝突的第三方庫的版本。雖然我不得不承認它並不總是工作。或者工作得很好。 – Scorpio

回答

4

是的,這樣的衝突可能是嚴重的。

比較版本與另一版本時不知道是否存在不兼容的依賴項更改(比較次要版本時不應該有,但誰確切地知道?)。或者,也許某些依賴依賴於其他依賴項的錯誤行爲。如果這個bug已被修復會怎麼樣?取決於錯誤的一個模塊將無法正確執行。

您應該排除衝突的依賴關係(更有可能排除較低版本)。對於您輸入的每個排除項,您必須檢查排除的版本和現在使用的版本之間是否存在不兼容的更改。如果是這種情況,您必須檢查依賴於該模塊的依賴關係,如果它們受到此類更改的影響。

3

大多數情況下,這應該是好的,如果新版本已被maven選中。

如果主版本(第一個數字)有差異,或者新版本被忽略,您應該開始擔心。單元測試有助於解決這些問題,但eclipse項目和maven依賴項通常會以微妙的方式(調試範圍等)不同。唯一真正的保護似乎是集成測試。

2

可以是一個嚴重的問題,因爲你永遠無法確定發生了什麼,這是不好的。我認爲使用Maven配置的重點在於明確發生了什麼以及使用哪些依賴關係。

至於你應該做的是什麼,看我other answer - 你應該推向到固定「時間通過明確配置要使用的版本並離開了,並maven-enforcer plugin可以更容易與DependencyConvergence rule很多。這是爲了保護你免受衝突的傳遞依賴。