2013-10-22 42 views
1

我正在將我的項目從maven 2(2.2.1)遷移到maven 3(3.1.0),而我在使用jar版本時遇到了一些問題。當我試圖追查這個問題時,我遇到了一些與相關性插件不一致的結果,這使我感到困惑。maven 3依賴插件 - 不一致的結果

當我在行家3嘗試以下命令:

mvn dependency:tree -Dincludes=commons-codec 

結果是:

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ xxx --- 
[INFO] com.xxx.yyy:zzz:war:2.6-SNAPSHOT 
[INFO] \- net.sourceforge.jwebunit:jwebunit-htmlunit-plugin:jar:2.2:test 
[INFO] \- net.sourceforge.htmlunit:htmlunit:jar:2.5:test 
[INFO]  \- commons-codec:commons-codec:jar:1.3:compile 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 

因此結果表明公地編解碼器-1.3.jar將用於。 (maven 3在包裝時確實包含commons-codec-1.3.jar)。

但是,如果我添加選項(-Dverbose)將命令

mvn dependency:tree -Dincludes=commons-codec -Dverbose 

結果將是

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ xxx --- 
[INFO] com.xxx.yyy:zzz:war:2.6-SNAPSHOT 
[INFO] +- net.sourceforge.jwebunit:jwebunit-htmlunit-plugin:jar:2.2:test 
[INFO] | \- net.sourceforge.htmlunit:htmlunit:jar:2.5:test 
[INFO] |  +- commons-httpclient:commons-httpclient:jar:3.1:test 
[INFO] |  | \- (commons-codec:commons-codec:jar:1.2:test - omitted for conflict with 1.3) 
[INFO] |  \- (commons-codec:commons-codec:jar:1.3:compile - scope updated from test; omitted for duplicate) 
[INFO] \- xxx.yyy.zzz.core:www-core:jar:2.6-SNAPSHOT:compile 
[INFO] +- org.apache.httpcomponents:httpclient:jar:4.2.2:compile 
[INFO] | \- commons-codec:commons-codec:jar:1.6:compile 
[INFO] \- xxx.yyy.zzz.security:datasecurity:jar:2.0:compile 
[INFO]  \- (commons-codec:commons-codec:jar:1.3:compile - omitted for conflict with 1.6) 
[INFO] ------------------------------------------------------------------------ 

第二個結果表明,版本1.2 1.3 將因衝突而被省略,並且maven將使用1.6。顯然它並非如此,因爲maven 3打包commons-codec-1.3.jar在war文件中。

爲什麼maven 3中的插件在兩種情況下顯示不同的依賴關係(它不應該像-Dverbose應該只顯示哪些依賴關係被省略以及爲什麼)?這是一個錯誤還是我錯過了什麼?

這是值得大家注意的是行家2將打包帶公地編解碼器1.6.jar

P/S:

+0

請看看[這裏](https://cwiki.apache.org/confluence/display/MAVEN/Maven+3.x+Compatibility+Notes) – khmarbaise

+0

謝謝,我做到了。我明白,在某些情況下,maven 2和maven 3之間的依賴關係可以解決不同。我不明白的是「爲什麼插件在兩種情況下建議不同的依賴關係,只是因爲」-Dverbose「)。 – oppjinx

回答

0

的Maven始終是最接近依賴that match,在這種情況下,1.2,1.3和1.6的深度同級別的:3。因此Maven的有選擇其中之一,並採取1.6。

你可能會迫使一個給定的依賴版本通過直接將依賴於你的模塊的pom.xml這將使它深入和力行家與您定義的版本中使用它的第一級。

此外,這似乎很奇怪,我認爲你期待1.2版,因爲它是測試依賴(公地的HttpClient:公地的HttpClient:罐子:3.1:測試)之一的傳遞依賴,這不應該被打包。

+0

感謝您的回覆。其實我期望1.6,這就是maven 2目前正在做的事情,我也希望這個插件可以顯示一致的結果,無論是否使用-Dverbose。無論如何,我重新提出我的問題以使其更加清晰。 – oppjinx