Beheben mehrere SLF4J-Bindungen in maven project
Dies ist eine Frage klingt Haufen ähnliche Fragen auf den SE-Seiten, so sollte ich ziemlich detailliert sein, um meine Frage klar. So, hier ist ein Projekt, das minimale pom.xml
:
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.6</version>
</dependency>
<dependency>
<groupId>org.codehaus.gmaven.runtime</groupId>
<artifactId>gmaven-runtime-1.7</artifactId>
<version>1.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>org.shabunc.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>
Hier ist die Abhängigkeit Baum produziert von maven.
mvn dependency:tree -Dverbose -Dincludes=org.slf4j
:
[INFO] [dependency:tree {execution: default-cli}]
[INFO] org.shabunc:logdebug:jar:1.0-SNAPSHOT
[INFO] \- ch.qos.logback:logback-classic:jar:1.0.6:compile
[INFO] \- org.slf4j:slf4j-api:jar:1.6.5:compile
Nun, lassen Sie uns entfernen, Ausgrenzung und überprüfen Sie die Abhängigkeiten wieder. Wir erhalten:
[INFO] org.shabunc:logdebug:jar:1.0-SNAPSHOT
[INFO] +- ch.qos.logback:logback-classic:jar:1.0.6:compile
[INFO] | \- org.slf4j:slf4j-api:jar:1.6.5:compile
[INFO] \- org.codehaus.gmaven.runtime:gmaven-runtime-1.7:jar:1.3:compile
[INFO] +- (org.slf4j:slf4j-api:jar:1.5.10:compile - omitted for conflict with 1.6.5)
[INFO] +- org.codehaus.gmaven.feature:gmaven-feature-support:jar:1.3:compile
[INFO] | \- (org.slf4j:slf4j-api:jar:1.5.10:compile - omitted for conflict with 1.6.5)
[INFO] \- org.codehaus.gmaven.runtime:gmaven-runtime-support:jar:1.3:compile
[INFO] +- (org.slf4j:slf4j-api:jar:1.5.10:compile - omitted for conflict with 1.6.5)
[INFO] \- org.sonatype.gshell:gshell-io:jar:2.0:compile
[INFO] \- org.sonatype.gossip:gossip:jar:1.0:compile
[INFO] \- (org.slf4j:slf4j-api:jar:1.5.8:compile - omitted for conflict with 1.6.5)
So, wie wir sehen können, alles funktioniert wie erwartet " und "Konflikt" Abhängigkeit ist eigentlich ausgeschlossen. Aber die Sache ist, dass selbst mit Abhängigkeit ausgeschlossen ich bekomme immer noch folgende Fehlermeldung beim kompilieren und aufrufen mvn exec:java
:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/shabunc/.m2/repository/ch/qos/logback/logback-classic/1.0.6/logback-classic-1.0.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/shabunc/.m2/repository/org/sonatype/gossip/gossip/1.0/gossip-1.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
Die Frage ist: Warum sehe ich immer noch diese Warnung und was genau muss getan werden, damit nur eine version von slf4j erreichbar während der Ausführung?
InformationsquelleAutor der Frage shabunc | 2012-08-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein problem ist nicht, immer zwei Kopien der SLF4J API, es wird immer zwei verschiedene SLF4J-Implementierungen. Sie müssen ausschließen, Klatsch, nicht die API. Das bedeutet so etwas wie:
Den Klatsch-Abhängigkeit erklärt
gshell-io
; hoffentlich ist es nicht wirklich brauchen, Klatsch, es muss nur ein SLF4J SLF4J, die Sie liefert in der Form von Logback.InformationsquelleAutor der Antwort Tom Anderson
Alles, was Sie tun müssen ist, fügen Sie so etwas wie dieses
InformationsquelleAutor der Antwort Byter
Ich denke, Sie brauchen, um zu spielen mit Rahmen-Abhängigkeiten finden Sie unter: http://www.mojohaus.org/exec-maven-plugin/java-mojo.html
InformationsquelleAutor der Antwort Andrey Borisov