it-swarm.com.de

Mehrere SLF4J-Bindungen verursachen Fehler?

Ich habe ein Problem mit meinem Abhängigkeitsbaum und der mehrfachen SLF4J-Bindung. Was ich bisher herausgefunden habe, ist, dass dies normalerweise nur eine Warnung auslöst, aber in meinem Fall scheint es zu verhindern, dass mein Programm ausgeführt wird: Folgende Ausnahmen bekomme ich:

SLF4J: Klassenpfad enthält mehrere SLF4J-Bindungen . SLF4J: Bindung gefunden 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: Bindung gefunden 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: Siehe http://www.slf4j.org/codes.html#multiple_bindings für eine Erklärung . SLF4J: slf4j-api 1.6.x (oder höher) ist mit dieser Bindung nicht kompatibel . SLF4J: Ihre Bindung ist Version 1.5.5 oder früher . SLF4J: Aktualisieren Sie Ihre Bindung auf Version 1.6.x. oder 2.0.x Ausnahme im Thread "main" Java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton () Lorg/slf4j/impl/StaticLoggerBinder;

und das ist das relevante Stück meiner 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 jemand bitte sagen, wie ich dieses Problem lösen kann? 

11
Biffy

Hierfür gibt es einige Lösungen:

  • Stellen Sie sicher, dass Sie nur ein slf4j-jar (wahrscheinlich mit der höheren Version) enthalten, wenn Sie mehrere davon mit unterschiedlichen Versionen im Klassenpfad haben.
  • Manchmal ist es möglicherweise nicht möglich, mehrere slf4j -Dosen auszuschließen, da sie von anderen Jars intern verwendet werden können, die sich in Ihrem Klassenpfad befinden. Diese abhängigen JAR-Dateien können sich auf verschiedene Versionen von SLF4J-JARs beziehen, wodurch Ihre Anwendung fehlschlägt. In solchen Fällen müssen Sie sicherstellen, dass Sie das Glas mit der höheren Version von SLF4j vor dem anderen Glas mit SLF4J-Gläsern hinzugefügt haben . Dadurch wird sichergestellt, dass Ihr Java-Programm die neueste Version des SLF4J verwendet, die offensichtlich abwärtskompatibel ist.
23
Ankur Shanbhag

Wenn Ihr Projekt von einem anderen Projekt abhängig ist und das andere Projekt slf4j mit einer anderen Version verwendet, versuchen Sie, excusion zu verwenden. 

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

Die Antwort von Fateh ist richtig. Ich musste einige Zeit damit verbringen, um herauszufinden, wie man sie benutzt. Deshalb füge ich eine Komplettlösung hinzu:

  1. mvn dependency:tree ausführen

  2. finden Sie heraus, welche Bibliothek slf4j verwendet:

    [INFO] +- net.lightbody.bmp:browsermob-proxy:jar:2.0-beta-8:compile
    [INFO] |  +- org.slf4j:slf4j-jdk14:jar:1.7.25:compile
    
  3. schließe es so aus:

         <dependency>
            <groupId>net.lightbody.bmp</groupId>
            <artifactId>browsermob-proxy</artifactId>
            <version>2.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-jdk14</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
2
Han Kai

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>

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

1
t.rakesh

Wenn im Klassenpfad mehrere Bindungen verfügbar sind, wählen Sie nur eine Bindung aus, die Sie verwenden möchten, und entfernen Sie die anderen Bindungen.

Entfernen Sie die explizit hinzugefügte Abhängigkeit von 'org.slf4j' oder 'log4j2'. 

0
Akanksha Sharma

Dies ist der Fall, wenn es mehr als ein Glas gibt. Um zu überprüfen, ob das Jar bereits vorhanden ist oder nicht, gehen Sie zu Projekt -> Java-Ressourcen -> Maven-Abhängigkeiten und prüfen Sie, ob das Jar dort bereits vorhanden 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 dann eine neuere Version herunter und importieren Sie sie in Ihr Projekt. :)

Manchmal bekomme ich Fehler, auch wenn ich die richtige JAR-Datei mit der richtigen Version in meiner pom.xml-Datei heruntergeladen habe. Dann muss ich es aus meiner pom.xml entfernen und dieses jar von google herunterladen und in mein Projekt importieren. Wenn Sie dies tun, sollten Sie unbedingt auf Projekteigenschaften -> Registerkarte Bereitstellung - klicken. Klicken Sie auf Hinzufügen -> Java Build Path Entries und Klicken Sie auf diese JAR-Datei, und klicken Sie auf Übernehmen.

0
Hamza