2012-12-12 16 views
9

Otrzymuję nieoczekiwaną wersję zależności (1.5.8), gdy używam wtyczki zespołu, ale nigdzie indziej. W moim pom mam:Zespół maven pobiera nieprawidłową zależność

<dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.6.0</version> 
    </dependency> 

Kiedy biegnę dependency:tree lub dependency:list widzę prawidłową wersję i tylko poprawną wersję. Po sprawdzeniu Eclipse widzę tylko poprawną wersję.

W moim assembly.xml mam:

<dependencySets> 
    <dependencySet> 
     <outputDirectory>lib</outputDirectory> 
    </dependencySet> 
</dependencySets> 

W wyświetlonym zip, mam slf4j-log4j12-1.5.8.jar. Nie mam pojęcia, skąd to pochodzi. Jakaś pomoc?

Korzystanie z urządzenia 3.0.4.

Odpowiedz

10

Było to spowodowane wersją wtyczki montaż 'złego' (2,2-beta-5). Mój pom.xml nie określił wersji wtyczki. Kiedy jawnie oznaczyłem go jako 2.4 (lub najnowszą wersję po przeczytaniu tego!), Wtyczka wyciągnęła właściwą zależność.

Lekcja - Jeśli pojawi się następujące ostrzeżenie w swojej produkcji:

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

.. Fix it!

+1

Dzięki, przejście z wersji 2.2-beta-5 na 2.4 naprawiło to dla mnie :-) –

+0

Po godzinach headbangingu dla dokładnego problemu to pytanie dotyczy, właśnie takiej odpowiedzi potrzebowałem. Dziękuję Ci! – Stewart

4
  1. Możesz spróbować usunąć złe JAR (slf4j-log4j12-1.5.8.jar) z repozytorium maven i dodać poprawny tam (slf4j-log4j12-1.6.0.jar). Następnie uruchom kompilację przy użyciu przełącznika --offline. W momencie, gdy maven spróbuje złapać niewłaściwego JAR-a, kompilacja się nie powiedzie i maven pokaże ci, z jakiej przejściowej zależności próbuje ją uzyskać. Następnie należy wyłączyć go z transistive zależności od tego:

    <exclusions> 
        <exclusion> 
        <artifactId>slf4j-api</artifactId> 
        <groupId>slf4j-log4j12</groupId> 
        </exclusion> 
    </exclusions> 
    
  2. sprawdzić, czy słoika, że ​​masz ma prawidłową GroupID. Niektórzy ludzie tworzą duplikaty wspólnych JARów dla głupich i złych specjalnych celów, które mogą mylić maven. W szczególności sprawdź, czy zamiast tego nie dostajesz org.jboss.resteasy:slf4j-log4j12. Można zakazać niepożądanych zależności używając maven-Enforcer-plugin, jak to:

    <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> 
    
+1

Lub proste uruchomienie zależności mvn: drzewo, aby znaleźć zależność przechodni i wykluczyć słoik, jak wspomniano powyżej. – om39a

Powiązane problemy