2013-10-29 13 views
6

Ich habe ein Problem mit meinem Abhängigkeitsbaum und mehrere SLF4J Bindung. Was ich fand, ist so weit aus, dass dies in der Regel nur eine Warnung verursacht, aber in meinem Fall scheint es, mein Programm nicht ausgeführt werden: Diese Ausnahmen sind bekomme ich:Mehrere SLF4J-Bindungen verursachen Fehler?

SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/FischerNi/.m2/repository/org/slf4j/slf4j-jdk14/1.5.3/slf4j-jdk14-1.5.3.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/C:/Users/FischerNi/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: slf4j-api 1.6.x (or later) is incompatible with this binding. SLF4J: Your binding is version 1.5.5 or earlier. SLF4J: Upgrade your binding to version 1.6.x. or 2.0.x Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLoggerBinder;

und das ist das relevante Stück meines Abhängigkeiten: net.lightbody.bmp browsermob-Proxy 2.0-beta-8

<!-- LOGGING DEPENDENCIES - LOG4J --> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
    </dependency> 

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

Kann mir bitte jemand sagen, wie dieses Problem zu lösen?

+0

Du einschließlich 'slf4j-log4j12' mehr Male (entweder direkt oder indirekt über eine andere Abhängigkeit) mit unterschiedlichen Versionen (1.5.3 und 1.6.1, nach der Fehlermeldung). – Jesper

Antwort

15

Es gibt einige Lösungen für diese:

  • Vergewissern Sie sich, dass Sie sind nur ein slf4j jar (wahrscheinlich mit der höheren Version), wenn Sie einige von ihnen mit verschiedenen Versionen auf Ihrem Klassenpfad haben.
  • Manchmal kann es nicht möglich sein, mehrere slf4j Gläser auszuschließen, da sie intern von anderen Gläser verwendet werden können, die auf Ihrem Classpath sind. Diese abhängigen jar können sich auf verschiedene Versionen von slf4j jars beziehen, die dazu führen, dass Ihre Anwendung fehlschlägt. In solchen Fällen machen sicher, dass Sie das Glas mit einem höheren Version von SLF4J haben zugegeben, bevor anderes Glas SLF4J Gläser verwenden. Dadurch wird sichergestellt, dass Ihr Java-Programm die neueste Version des SLF4J aufnimmt, die offensichtlich abwärtskompatibel ist.
+0

Vielen Dank! Die zweite Lösung funktionierte für mich. – Biffy

+0

@Ankur Und wie garantiere ich in der Finsternis, dass es das späteste aufhebt? –

+3

Geben Sie den neuesten zuerst in Ihrem Projektbuildpfad an. Um die Reihenfolge zu überprüfen, überprüfen Sie die .classpath-Datei Ihres Projekts. Es zeigt die Reihenfolge an, in der JAR-Dateien hinzugefügt werden. –

1

Ich würde vorschlagen, stattdessen folgende Abhängigkeit in Maven zu verwenden,

<dependency> 
<groupId>log4j</groupId> 
<artifactId>log4j</artifactId> 
<version>1.2.17</version> 
</dependency> 

Das hat mein Problem gelöst, obwohl ich mit slf4j mehr Abhängigkeiten.

0

Wenn Ihr Projekt hat die Abhängigkeit von anderem Projekt und der anderen Verwendung slf4j als auch mit verschiedener Version ausprobieren excusion

<exclusions> 
    <exclusion> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
    </exclusion> 
</exclusions> 
0

Dies kann den Fall zu verwenden ist, wenn es mehr als ein Glas ist. Um zu überprüfen, ob dort bereits jar vorhanden ist oder nicht, gehen Sie zu Projekt -> java resources -> maven dependencies und prüfen Sie, ob das jar dort bereits verfügbar ist oder nicht. Wenn es verfügbar ist und Sie immer noch den Fehler erhalten. Suchen Sie dann den Speicherort dieser JAR-Datei im Ordner .m2 \ resources und löschen Sie den vollständigen Ordner, der sich auf diese JAR-Datei bezieht, laden Sie eine neuere Version herunter und importieren Sie sie in Ihr Projekt. :)

Irgendwann bekomme ich Fehler auch ich herunterladen das Recht haben, JAR-Datei mit der rechten Version in meinem pom.xml-Datei. Dann muss ich es von meinem pom.xml entfernen und dass jar von Google herunterladen und importieren es meinem project.Make sicher, ob Sie es tun, dann vergessen Sie nicht, Projekteigenschaften zu gehen -> Deployment Assembly tab-> klicken -> Java Build Path Entries und klicken Sie auf diese JAR-Datei und klicken Sie auf Übernehmen.

Verwandte Themen