Ich habe ein Problem mit widersprüchlichen Abhängigkeiten in meinem Projekt. Insbesondere gibt es zwei Implementierungen von slf4j Protokollierung: slf4j-einfacher und logback-klassisch, und ich binOhne Abhängigkeit in maven
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/apykhtin/.m2/repository/org/slf4j/slf4j-simple/1.7.19/slf4j-simple-1.7.19.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/apykhtin/.m2/repository/ch/qos/logback/logback-classic/1.1.3/logback-classic-1.1.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]
Exception in thread "main" java.lang.IllegalStateException: Unable to acquire the logger context
at io.dropwizard.logging.LoggingUtil.getLoggerContext(LoggingUtil.java:46)
zur Laufzeit zu bekommen.
Logback-Klassiker ist ein Muss-Abhängigkeit für mich (wegen Dropwizard), aber Slf4j-einfach ist nicht wirklich, und ich möchte es aus meinem Uber-Projekt fallen lassen. Nur ist es nicht so einfach.
Mein "Uber-Jar" hat eine Abhängigkeit von "Small-Jar", die wiederum eine Abhängigkeit von "Slf4j-Simple" hat. einen Ausschluss Putting in pom uber Glas ist ist nicht zu helfen:
<dependency>
<groupId>com.my.unique.group</groupId>
<artifactId>small-jar</artifactId>
<version>0.1.2-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</exclusion>
</exclusions>
</dependency>
Ich denke, weil kleine jar "beschattet" wird. Mein "Uber-Jar" verwendet Maven-Shade-Plugin, während "Small-Jar" nicht ist. Ich habe auch versucht slf4j-einfach aus Schattierung auszuschließen:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.6</version>
<configuration>
<artifactSet>
<excludes>
<exclude>org.slf4j:slf4j-simple:jar</exclude>
</excludes>
</artifactSet>
...
</plugin>
aber auch ohne Erfolg. slf4j-simple wird immer noch in meinem Uber-Jar enthalten. Bisher war meine Entwicklung mit "Uber-Jar" verwandt. Es ist mir möglich, Änderungen am "Small-Jar" -Code vorzunehmen, aber das möchte ich vermeiden.
Was mache ich falsch?
Update: maven-shade-plugin ist nicht der Schuldige hier. Ich habe dieses Plugin komplett ausgeschaltet und bekomme immer noch den gleichen Fehler. – Alexander
Update 2: Offensichtlich wurden meine Probleme durch Projektfehlkonfiguration verursacht. Nach dem Löschen von allem (einschließlich Maven-Repository), Auschecken neuer Quellen und Erstellen von Projekten in Eclipse von Grund auf, alles funktioniert wie erwartet. Dank euch allen. – Alexander