多个slf4j绑定甚至在pom排除后?

时间:2016-10-28 17:53:05

标签: java maven-3 slf4j

我已经尽可能多地阅读了这篇文章并尝试了在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地狱中的版本问题,是的,我是那么老了。)

0 个答案:

没有答案