2017-04-10 6 views
3

推移的な依存性問題としてlogback-classicのロードに本当に苦労しました。私はスタックオーバーフローでここに見つかったアドバイスに従いますが、それは再発生し続けます。slf4jとlogback-classicの推移的従属性についての確定的な答え

私はpaven依存関係階層にmaven除外を使用して制御しようとしていますが、それはまったく表示されません。それでもまだロードされています!

は、ここに私のランタイムトレース問題の

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/home/david/.m2/repository/de/ruedigermoeller/kontraktor-http/3.33/kontraktor-http-3.33.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/home/david/.m2/repository/ch/qos/logback/logback-classic/1.2.1/logback-classic-1.2.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
W 13:22:24:837 : DispatcherThread 1 : DispatcherThread : 
java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getLoggerFactoryClassStr()Ljava/lang/String; 
at org.slf4j.LoggerFactory.reportActualBinding(LoggerFactory.java:271) 
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:143) 
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:120) 
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:331) 
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:283) 
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:304) 
at org.quartz.impl.StdSchedulerFactory.<init>(StdSchedulerFactory.java:284) 
at org.quartz.impl.StdSchedulerFactory.getDefaultScheduler(StdSchedulerFactory.java:1539) 
at uk.co.example.ExampleEwsService.init(ExampleEwsService.java:296) 

パートKontraktorフレームワークがStaticLoggerBinder.getLoggerFactoryClassStrメソッドをオーバーライドすることです。しかし、次のようにそれは、それが最初にロードされると、それをロードされ、石英からlogback-古典を除外することを確認するのは簡単です:

<dependency> 
     <groupId>org.quartz-scheduler</groupId> 
     <artifactId>quartz</artifactId> 
     <version>2.2.3</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-api</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.quartz-scheduler</groupId> 
     <artifactId>quartz-jobs</artifactId> 
     <version>2.2.3</version> 
    </dependency> 

この時点でSLF4Jでのみkontraktorによってロードされます。 logback-古典的な依存関係でどこにも表示されません:木

[INFO] +- de.ruedigermoeller:kontraktor:jar:3.33:compile 
[INFO] | +- org.jctools:jctools-core:jar:1.0:compile 
[INFO] | \- de.ruedigermoeller:fst:jar:2.44.5: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] |  \- com.cedarsoftware:java-util:jar:1.9.0:compile 
[INFO] |  \- com.cedarsoftware:json-io:jar:2.5.1:compile 
[INFO] +- de.ruedigermoeller:kontraktor-http:jar:3.33: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-codec:commons-codec:jar:1.9: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] +- org.apache.logging.log4j:log4j-api:jar:2.5:compile 
[INFO] +- org.apache.logging.log4j:log4j-core:jar:2.5:compile 
[INFO] +- org.quartz-scheduler:quartz:jar:2.2.3:compile 
[INFO] | \- c3p0:c3p0:jar:0.9.1.1:compile 
[INFO] +- org.quartz-scheduler:quartz-jobs:jar:2.2.3:compile 

だから、簡単な質問、どのようにlogback-古典がロードされるんし、誰がそれをロードしていますか?

+0

ログには、classpathにまだlogback-classic-1.2.1.jarがあることが示されています。多分mvnをきれいにしてみてください。あるいはあなたのIDEのクリーンなコマンドがこの問題を解決できるかもしれません。 – Solo

+0

mvn clean installとmaven cleanパッケージの両方を試しましたが、結果に変更はありません。私はそれが私のクラスパスにあることを知っている、私が知る必要があるのは誰がそこにそれを含めているかである。 – csDave

+1

依存関係の目標を持つ他のオプションを試して、依存関係を特に調べましたか?例えば 'mvn dependency:tree -Dincludes = org.slf4j:slf4j-api' –

答えて

3

Darren Forsytheさんのコメントが答えです。この-Dincludes = ch.qos.logback:logback-classicは、依存関係を見つけることを可能にしました。依存関係:ツリー検索は非常に深いです。 -Dincludesは、指定された依存関係の完全な階層を検索します。

関連する問題