我已经尽可能多地阅读了这篇文章并尝试了在stackoverflow和slf4j faq上提供的解决方案,但没有成功。
这是我的控制台日志:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/david/.m2/repository/de/ruedigermoeller/kontraktor-http/3.28/kontraktor-http-3.28.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/david/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.0/log4j-slf4j-impl-2.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getLoggerFactoryClassStr()Ljava/lang/String;
at org.slf4j.LoggerFactory.reportActualBinding(LoggerFactory.java:263)
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:131)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:108)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:302)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:276)
at org.jboss.logging.Slf4jLoggerProvider.getLogger(Slf4jLoggerProvider.java:29)
at org.jboss.logging.LoggerProviders.find(LoggerProviders.java:33)
at org.jboss.logging.LoggerProviders.<clinit>(LoggerProviders.java:28)
at org.jboss.logging.Logger.getLogger(Logger.java:2163)
at org.jboss.logging.Logger$1.run(Logger.java:2263)
at java.security.AccessController.doPrivileged(Native Method)
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2227)
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2214)
at org.xnio._private.Messages.<clinit>(Messages.java:56)
at org.xnio.Xnio.<clinit>(Xnio.java:93)
at io.undertow.Undertow.start(Undertow.java:97)
at org.nustaq.kontraktor.remoting.http.Http4K.getServer(Http4K.java:94)
at org.nustaq.kontraktor.remoting.http.builder.BldFourK.build(BldFourK.java:115)
这是我的mvn依赖:树输出
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ quokka ---
[INFO] uk.co.example:jar:0.1-SNAPSHOT
[INFO] +- de.ruedigermoeller:kontraktor:jar:3.28:compile
[INFO] | \- org.jctools:jctools-core:jar:1.0:compile
[INFO] +- de.ruedigermoeller:kontraktor-http:jar:3.28:compile
[INFO] | +- io.github.lukehutch:fast-classpath-scanner:jar:1.2.3:compile
[INFO] | +- org.apache.httpcomponents:httpasyncclient:jar:4.1:compile
[INFO] | | +- org.apache.httpcomponents:httpcore:jar:4.4.1:compile
[INFO] | | +- org.apache.httpcomponents:httpcore-nio:jar:4.4.1:compile
[INFO] | | +- org.apache.httpcomponents:httpclient:jar:4.4.1:compile
[INFO] | | \- commons-logging:commons-logging:jar:1.2:compile
[INFO] | +- javax.websocket:javax.websocket-api:jar:1.1:compile
[INFO] | +- io.undertow:undertow-core:jar:1.2.8.Final:compile
[INFO] | | +- org.jboss.logging:jboss-logging:jar:3.1.4.GA:compile
[INFO] | | +- org.jboss.xnio:xnio-api:jar:3.3.1.Final:compile
[INFO] | | \- org.jboss.xnio:xnio-nio:jar:3.3.1.Final:runtime
[INFO] | +- io.undertow:undertow-websockets-jsr:jar:1.2.8.Final:compile
[INFO] | | +- io.undertow:undertow-servlet:jar:1.2.8.Final:compile
[INFO] | | | +- org.jboss.spec.javax.servlet:jboss-servlet-api_3.1_spec:jar:1.0.0.Final:compile
[INFO] | | | \- org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:jar:1.0.0.Final:compile
[INFO] | | \- org.jboss.spec.javax.websocket:jboss-websocket-api_1.1_spec:jar:1.1.0.Final:compile
[INFO] | +- org.slf4j:slf4j-api:jar:1.7.12:compile
[INFO] | \- org.jsoup:jsoup:jar:1.8.2:compile
[INFO] +- de.ruedigermoeller:fst:jar:2.44:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-core:jar:2.5.3:compile
[INFO] | +- org.javassist:javassist:jar:3.19.0-GA:compile
[INFO] | \- org.objenesis:objenesis:jar:2.1:compile
[INFO] +- org.kie:kie-api:jar:6.3.0.Final:compile
[INFO] +- org.drools:drools-compiler:jar:6.3.0.Final:compile
[INFO] | +- org.drools:drools-core:jar:6.3.0.Final:compile
[INFO] | +- org.kie:kie-internal:jar:6.3.0.Final:compile
[INFO] | +- org.antlr:antlr-runtime:jar:3.5:compile
[INFO] | +- org.eclipse.jdt.core.compiler:ecj:jar:4.3.1:compile
[INFO] | +- org.mvel:mvel2:jar:2.2.6.Final:compile
[INFO] | +- com.thoughtworks.xstream:xstream:jar:1.4.7:compile
[INFO] | | +- xmlpull:xmlpull:jar:1.1.3.1:compile
[INFO] | | \- xpp3:xpp3_min:jar:1.1.4c:compile
[INFO] | \- com.google.protobuf:protobuf-java:jar:2.5.0:compile
[INFO] +- commons-codec:commons-codec:jar:1.6:compile
[INFO] +- org.apache.commons:commons-csv:jar:1.2:compile
[INFO] +- org.apache.logging.log4j:log4j-core:jar:2.5:compile
[INFO] +- org.apache.logging.log4j:log4j-api:jar:2.5:compile
[INFO] +- com.datastax.cassandra:cassandra-driver-dse:jar:2.2.0-rc2:compile
[INFO] | \- com.datastax.cassandra:cassandra-driver-core:jar:2.2.0-rc2:compile
[INFO] | +- io.netty:netty-handler:jar:4.0.27.Final:compile
[INFO] | | +- io.netty:netty-buffer:jar:4.0.27.Final:compile
[INFO] | | | \- io.netty:netty-common:jar:4.0.27.Final:compile
[INFO] | | +- io.netty:netty-transport:jar:4.0.27.Final:compile
[INFO] | | \- io.netty:netty-codec:jar:4.0.27.Final:compile
[INFO] | \- com.codahale.metrics:metrics-core:jar:3.0.2:compile
[INFO] +- com.valchkou.datastax:cassandra-driver-mapping:jar:2.0.1:compile
[INFO] | \- org.eclipse.persistence:javax.persistence:jar:2.1.0:compile
[INFO] +- net.openhft:zero-allocation-hashing:jar:0.6:compile
这是我的pom.xml,无论如何都是相关部分:
<dependencies>
<dependency>
<groupId>de.ruedigermoeller</groupId>
<artifactId>kontraktor</artifactId>
<version>${kontraktor.version}</version>
</dependency>
<dependency>
<groupId>de.ruedigermoeller</groupId>
<artifactId>kontraktor-http</artifactId>
<version>${kontraktor.version}</version>
</dependency>
<dependency>
<groupId>de.ruedigermoeller</groupId>
<artifactId>fst</artifactId>
<version>${fst.version}</version>
</dependency>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-api</artifactId>
<version>${drools.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>${drools.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-dse</artifactId>
<version>${cassandra}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</exclusion>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.valchkou.datastax</groupId>
<artifactId>cassandra-driver-mapping</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>net.openhft</groupId>
<artifactId>zero-allocation-hashing</artifactId>
<version>0.6</version>
</dependency>
<dependency>
<groupId>uk.co.creditswift</groupId>
<artifactId>creditswift.domain</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
我也试过排除更多的jar,但是会出现导致NoSuchMethodError的不同版本的双重绑定。你可以看到我明确地从log4j-core和log4j-api中排除了jar,但它在跟踪中出现了吗? log4j-slf4j-impl甚至没有出现在依赖树中,所以不知道它是如何加载的。
我没有想法。任何人都明白这一点(它让我想起了DLL地狱中的版本问题,是的,我是那么老了。)