сборка maven тянет неправильную зависимость
Я получаю неожиданную версию зависимости (1.5.8), когда я использую модуль сборки, но больше нигде. В моем пом у меня есть:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.0</version>
</dependency>
Когда я запускаю dependency:tree
или dependency:list
, я вижу правильную версию и только правильную версию. Когда я регистрируюсь в Eclipse, я вижу только правильную версию.
В моей ассамблее.xml у меня есть:
<dependencySets>
<dependencySet>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
В результирующем zip я получаю slf4j-log4j12-1.5.8.кувшин. Понятия не имею, откуда это берется. Помощь есть?
Использование maven 3.0.4.
2 ответа:
Это было связано с "плохой" версией плагина сборки (2.2-beta-5). Мой пом.xml не указал версию плагина. Когда я явно отметил его как 2.4 (или последнюю версию, когда вы читаете это!), плагин вытащил правильную зависимость.
Урок усвоен-если вы получаете следующее предупреждение в вашей сборке:
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-whatever-plugin is missing It is highly recommended to fix these problems because they threaten the stability of your build.
.. исправь это!
Вы можете попытаться удалить плохую банку (slf4j-log4j12-1.5.8.jar) из вашего репозитория maven и добавьте туда правильный (slf4j-log4j12-1.6.0.кувшин). Затем запустите сборку с помощью переключателя
--offline
. В тот момент, когда maven пытается получить неправильную банку, сборка завершится неудачей, и maven покажет вам, из какой транзитивной зависимости он пытается ее получить. Затем вы исключаете его из транзистивных зависимостей следующим образом:<exclusions> <exclusion> <artifactId>slf4j-api</artifactId> <groupId>slf4j-log4j12</groupId> </exclusion> </exclusions>
Проверьте, есть ли у этого кувшина, который вы получили, правильные группы. Некоторые люди создают дубликаты обычных банок для
глупых и злыхспециальных целей, которые могут запутать maven. В специальном разделе проверьте, не получаете ли вы вместо этогоorg.jboss.resteasy:slf4j-log4j12
. Вы можете запретить нежелательные зависимости с помощью плагина maven-enforcer, например:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>1.0</version> <executions> <execution> <id>enforce-banned-dependencies</id> <goals> <goal>enforce</goal> </goals> <configuration> <rules> <bannedDependencies> <excludes> <exclude>org.slf4j:slf4j-log4j12:1.5.8</exclude> <!-- Wrong version, dude! --> <exclude>commons-logging:*</exclude> <!-- Worst, stupidest, lamest logging framework ever! --> <exclude>org.jboss.resteasy:slf4j-simple</exclude> <!-- Evil JAR duplication. --> <exclude>org.jboss.resteasy:slf4j-api</exclude> <!-- Evil JAR duplication. --> <exclude>org.jboss.resteasy:slf4j-log4j12</exclude> <!-- Evil JAR duplication. --> <exclude>org.jboss.resteasy:jackson-core-asl</exclude> <!-- Evil JAR duplication. --> <exclude>org.jboss.resteasy:jackson-mapper-asl</exclude> <!-- Evil JAR duplication. --> <exclude>org.jboss.resteasy:jackson-core-lgpl</exclude> <!-- Evil JAR duplication. --> <exclude>org.jboss.resteasy:jackson-mapper-lgpl</exclude> <!-- Evil JAR duplication. --> <exclude>org.codehaus.jackson:jackson-core-lgpl</exclude> <!-- Two distinct packages for the exact same thing always creates conflicts. We want the ASL one. --> <exclude>org.codehaus.jackson:jackson-mapper-lgpl</exclude> <!-- Two distinct packages for the exact same thing always creates conflicts. We want the ASL one. --> <exclude>velocity-tools:velocity-tools</exclude> <!-- Was renamed. --> <exclude>velocity:velocity</exclude> <!-- Was renamed. --> <exclude>struts:struts</exclude> <!-- Was renamed. --> <exclude>javassist:javassist</exclude> <!-- Was renamed. --> <exclude>axis:*</exclude> <!-- Was renamed to org.apache.axis:* and wsdl4j:wsdl4j . --> <exclude>commons-beanutils:commons-beanutils-core</exclude> <!-- Redundant package. --> <exclude>xpp3:xpp3_min</exclude> <!-- Redundant package. --> <exclude>xml-apis:xml-apis:2.0.0</exclude> <!-- Bad package, for some strange reason 2.0.x is inferior to 1.4.x. --> <exclude>xml-apis:xml-apis:2.0.2</exclude> <!-- Bad package, for some strange reason 2.0.x is inferior to 1.4.x. --> <exclude>quartz:quartz</exclude> <!-- Was renamed. --> </excludes> </bannedDependencies> </rules> </configuration> </execution> </executions> </plugin>