22

エラーが発生しています

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/george/.gradle/caches/artifacts-26/filestore/org.apache.logging.log4j/log4j-slf4j-impl/2.0-beta8/jar/15984318e95b9b0394e979e413a4a14f322401c1/log4j-slf4j-impl-2.0-beta8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/george/.gradle/caches/artifacts-26/filestore/org.slf4j/slf4j-log4j12/1.5.0/jar/aad1074d37a63f19fafedd272dc7830f0f41a977/slf4j-log4j12-1.5.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

私のbuild.gradleファイルには、jar log4j-slf4j-impl-2.0-beta8.jar(LOG4J2にバインドしたい)を含める次の行があります

 compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.0-beta8' 

依存プロジェクトの別の build.gradle ファイルには、次のような複数の行があります。

 compile 'dcm4che:dcm4che-core:2.0.23'

現在、dcm4che には log4j バージョン 1 (slf4j-log4j12) への依存関係が含まれているため、これはプロジェクト全体に含まれています。

Gradle 依存関係ツリーのスニペットを次に示します。

|    +--- dcm4che:dcm4che-core:2.0.23
|    |    \--- org.slf4j:slf4j-log4j12:1.5.0
|    |         +--- org.slf4j:slf4j-api:1.5.0 -> 1.7.5
|    |         \--- log4j:log4j:1.2.13 -> 1.2.14

警告で提案されているリンクを読みました が、必要な jar を使用してアプリを log4j2 にバインドする方法がわかりません。依存関係の管理に関する Gradle のドキュメントでは、実際にはそれが明確になっているわけではありません。

4

3 に答える 3

29

このコードをbuild.gradleファイルに入れます

configurations.all {
   exclude group: 'org.slf4j', module: 'slf4j-log4j12'
}
于 2016-06-13T06:26:21.963 に答える
16

解決策は、build.gradle に以下を追加することです。

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        if (details.requested.name == 'log4j') {
            details.useTarget "org.slf4j:log4j-over-slf4j:1.7.5"
        }
}

その結果、通常 log4j を必要とするものはすべて代わりに log4j-over-slf4j を使用することになります。

私も追加しました:

if (details.requested.name == 'commons-logging') {
    details.useTarget "org.slf4j:jcl-over-slf4j:1.7.5"
}

コモンズロギングをカバーする完全性のために。

于 2013-10-17T02:43:21.917 に答える
8

使用しないslf4j .jar を含む依存関係を除外します。Gradleの場合、これはそうするのに役立つかもしれません。

アップデート:

残念ながら、私は gradle に精通していませんが、リンクされたドキュメントから判断すると sth. お気に入り

compile('dcm4che:dcm4che-core:2.0.23') {
   exclude group: 'org.slf4j'
}

動作する可能性がありますか?ドキュメントには一種の「構成グローバル」除外リストが記載されていることに注意してください。これはこれを行うためのより良い方法かもしれませんが、それに関する詳細情報を見つけることができませんでした.

于 2013-09-23T08:01:52.243 に答える