Интерпретация "пропущено для конфликта" в дереве зависимостей maven 2 - PullRequest
33 голосов
/ 12 октября 2011

Это дерево зависимостей, сгенерированное 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

1 Ответ

56 голосов
/ 13 октября 2011

Я нашел ответ самостоятельно на http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html: ", если две версии зависимости находятся на одной и той же глубине в дереве зависимостей, до Maven 2.0.8 не было определено, какая из них выиграет, но начиная с Maven 2.0.9 имеет значение порядок в объявлении: первое объявление выигрывает ".

Мне кажется, это очень сомнительная стратегия. : - \

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...