Это дерево зависимостей, сгенерированное Maven 2.2.1 с mvn -o dependency:tree -Dverbose -Dincludes=log4j
[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