2011-10-12 27 views
25

Đây là một cây phụ thuộc được tạo ra bởi Maven 2.2.1 với mvn -o dependency:tree -Dverbose -Dincludes=log4jgiải thích "bỏ qua cho xung đột" trong maven 2 phụ thuộc cây

[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) 

Như bạn thấy log4j v1.2.12 được ưa thích hơn v1.2.13.

Tôi biết rằng "Maven giải quyết phiên bản xung đột với chiến lược thắng gần nhất" (xem http://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency-tree.html) nhưng hai phụ thuộc này dường như ở cùng khoảng cách (hai cấp độ lồng nhau, tôi có sai không?) Vì vậy tôi mong đợi rằng gần đây được sử dụng.

Ai đó có thể giải thích kết quả này không?

Có, log4j không được khai báo rõ ràng trong POM này (và tôi nghĩ nó nên là), nhưng tôi muốn hiểu rõ hơn cách Maven hoạt động.

Thx

Trả lời

45

tôi đã tìm thấy câu trả lời của bản thân mình tại http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html: "nếu hai phiên bản phụ thuộc đang ở cùng độ sâu trong cây phụ thuộc, cho đến khi Maven 2.0.8 nó không được định nghĩa mà người ta sẽ giành chiến thắng, nhưng kể từ Maven 2.0.9 đó là thứ tự trong khai báo đếm: tuyên bố đầu tiên thắng ".

Có vẻ như một chiến lược rất có vấn đề đối với tôi. : - \

+24

Đó là vấn đề, nhưng ít nhất là xác định. – TWiStErRob

+2

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

Các vấn đề liên quan