2011-10-12 55 views
25

「忽略衝突」這是Maven的2.2.1產生依賴樹 mvn -o dependency:tree -Dverbose -Dincludes=log4j解釋在Maven 2依賴樹

[INFO] [dependency:tree {execution: default-cli}] 
[INFO] com.openboxes.renderingservice:common:jar:1.0 
[INFO] +- org.springframework:spring:jar:2.0.4:compile 
[INFO] | \- commons-logging:commons-logging:jar:1.1:compile 
[INFO] |  \- log4j:log4j:jar:1.2.12:compile 
[INFO] \- it.mycompany.portal:server:jar:1.5-SNAPSHOT:compile 
[INFO] \- org.slf4j:slf4j-log4j12:jar:1.1.0:compile 
[INFO]  \- (log4j:log4j:jar:1.2.13:compile - omitted for conflict with 1.2.12) 

正如你所看到的log4j v1.2.12優於v1.2.13。我知道「Maven解決了與最近贏策略的版本衝突」(見http://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency-tree.html),但是這兩個依賴關係似乎處於相同的距離(兩個嵌套層次,我錯了嗎?),所以我期望最最近使用了一個。

有人可以解釋這個結果嗎?

是的,log4j沒有在這個POM中顯式聲明(我認爲它應該是),但我想更好地理解Maven的工作方式。

THX

回答

45

我發現我自己的答案在http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html:「如果兩個依賴的版本是在依賴關係樹相同的深度,直到Maven的2.0.8它沒有定義哪一個會贏,但自Maven 2.0.9以來,聲明中的順序就是重中之重:第一個聲明獲勝「。

這對我來說似乎是一個非常可疑的策略。 : - \

+24

這是值得懷疑的,但至少是確定性的。 – TWiStErRob

+2

https://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency-tree.html – daemon54