сборка 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 9

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.

.. исправь это!

  1. Вы можете попытаться удалить плохую банку (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>
    
  2. Проверьте, есть ли у этого кувшина, который вы получили, правильные группы. Некоторые люди создают дубликаты обычных банок дляглупых и злых специальных целей, которые могут запутать 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>