エラーが出ます
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のドキュメントでは、それが明確にされていません。
解決策は、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"
}
コモンズのロギングを網羅する完全性のため。
このコードをbuild.gradle
ファイル
configurations.all {
exclude group: 'org.slf4j', module: 'slf4j-log4j12'
}
使用したいslf4j .jarを含む依存関係を除外します(== --- ==)使用したくない。 Gradleの場合 this がそうするのに役立ちます。
更新:
残念ながら私はgradleに精通していませんが、リンクされたドキュメントから判断するとsthです。お気に入り
compile('dcm4che:dcm4che-core:2.0.23') {
exclude group: 'org.slf4j'
}
うまくいくかも?ドキュメンテーションは、これを行うためのより良い方法であるかもしれない一種の「構成グローバル」除外リストについて言及していることに注意してください。しかし、それについての詳細は見つかりませんでした。