在tring运行gradle build
时出现此错误我理解版本冲突但不确定如何解决它以及
要排除的版本......
gradle依赖树是:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/i/.gradle/caches/modules-
2/files-2.1/org.slf4j/slf4j-
log4j12/1.6.1/bd245d6746cdd4e6203e976e21d597a46f115802/slf4j-log4j12-
1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in
[jar:file:/C:/Users/i/.gradle/caches/modules-2/files-
2.1/ch.qos.logback/logback-
classic/1.1.3/d90276fff414f06cb375f2057f6778cd63c6082f/logback-classic-
1.1.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an
explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
SLF4J: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class
path, preempting StackOverflowError.
compile - Compile classpath for source set 'main'.
+--- com.google.code.gson:gson:2.2.4
+--- com.fasterxml.jackson.core:jackson-core:2.6.0
+--- com.fasterxml.jackson.core:jackson-databind:2.6.0
| +--- com.fasterxml.jackson.core:jackson-annotations:2.6.0
| \--- com.fasterxml.jackson.core:jackson-core:2.6.0
+--- com.fasterxml.jackson.core:jackson-annotations:2.6.0
+--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.6.0
| +--- com.fasterxml.jackson.core:jackson-core:2.6.0
| \--- org.yaml:snakeyaml:1.15
+--- org.projectlombok:lombok:1.16.10
+--- javax.validation:validation-api:1.1.0.Final
+--- org.apache.commons:commons-lang3:3.4
+--- org.apache.zookeeper:zookeeper:3.4.5
| +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21
| +--- org.slf4j:slf4j-log4j12:1.6.1
| | +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21
| | \--- log4j:log4j:1.2.16
| +--- log4j:log4j:1.2.15 -> 1.2.16
| +--- jline:jline:0.9.94
| | \--- junit:junit:3.8.1
| \--- org.jboss.netty:netty:3.2.2.Final
+--- org.apache.httpcomponents:httpcore:4.4.5 -> 4.4.6
+--- org.apache.httpcomponents:httpclient:4.5.3
| +--- org.apache.httpcomponents:httpcore:4.4.6
| +--- commons-logging:commons-logging:1.2
| \--- commons-codec:commons-codec:1.9
+--- commons-io:commons-io:2.5
+--- org.jdom:jdom2:2.0.5
\--- org.slf4j:slf4j-api:1.7.21
default - Configuration for default artifacts.
+--- com.google.code.gson:gson:2.2.4
+--- com.fasterxml.jackson.core:jackson-core:2.6.0
+--- com.fasterxml.jackson.core:jackson-databind:2.6.0
| +--- com.fasterxml.jackson.core:jackson-annotations:2.6.0
| \--- com.fasterxml.jackson.core:jackson-core:2.6.0
+--- com.fasterxml.jackson.core:jackson-annotations:2.6.0
+--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.6.0
| +--- com.fasterxml.jackson.core:jackson-core:2.6.0
| \--- org.yaml:snakeyaml:1.15
+--- org.projectlombok:lombok:1.16.10
+--- javax.validation:validation-api:1.1.0.Final
+--- org.apache.commons:commons-lang3:3.4
+--- org.apache.zookeeper:zookeeper:3.4.5
| +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21
| +--- org.slf4j:slf4j-log4j12:1.6.1
| | +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21
| | \--- log4j:log4j:1.2.16
| +--- log4j:log4j:1.2.15 -> 1.2.16
| +--- jline:jline:0.9.94
| | \--- junit:junit:3.8.1
| \--- org.jboss.netty:netty:3.2.2.Final
+--- org.apache.httpcomponents:httpcore:4.4.5 -> 4.4.6
+--- org.apache.httpcomponents:httpclient:4.5.3
| +--- org.apache.httpcomponents:httpcore:4.4.6
| +--- commons-logging:commons-logging:1.2
| \--- commons-codec:commons-codec:1.9
+--- commons-io:commons-io:2.5
+--- org.jdom:jdom2:2.0.5
\--- org.slf4j:slf4j-api:1.7.21
runtime - Runtime classpath for source set 'main'.
+--- com.google.code.gson:gson:2.2.4
+--- com.fasterxml.jackson.core:jackson-core:2.6.0
+--- com.fasterxml.jackson.core:jackson-databind:2.6.0
| +--- com.fasterxml.jackson.core:jackson-annotations:2.6.0
| \--- com.fasterxml.jackson.core:jackson-core:2.6.0
+--- com.fasterxml.jackson.core:jackson-annotations:2.6.0
+--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.6.0
| +--- com.fasterxml.jackson.core:jackson-core:2.6.0
| \--- org.yaml:snakeyaml:1.15
+--- org.projectlombok:lombok:1.16.10
+--- javax.validation:validation-api:1.1.0.Final
+--- org.apache.commons:commons-lang3:3.4
+--- org.apache.zookeeper:zookeeper:3.4.5
| +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21
| +--- org.slf4j:slf4j-log4j12:1.6.1
| | +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21
| | \--- log4j:log4j:1.2.16
| +--- log4j:log4j:1.2.15 -> 1.2.16
| +--- jline:jline:0.9.94
| | \--- junit:junit:3.8.1
| \--- org.jboss.netty:netty:3.2.2.Final
+--- org.apache.httpcomponents:httpcore:4.4.5 -> 4.4.6
+--- org.apache.httpcomponents:httpclient:4.5.3
| +--- org.apache.httpcomponents:httpcore:4.4.6
| +--- commons-logging:commons-logging:1.2
| \--- commons-codec:commons-codec:1.9
+--- commons-io:commons-io:2.5
+--- org.jdom:jdom2:2.0.5
\--- org.slf4j:slf4j-api:1.7.21
testCompile - Compile classpath for source set 'test'.
+--- com.google.code.gson:gson:2.2.4
+--- com.fasterxml.jackson.core:jackson-core:2.6.0
+--- com.fasterxml.jackson.core:jackson-databind:2.6.0
| +--- com.fasterxml.jackson.core:jackson-annotations:2.6.0
| \--- com.fasterxml.jackson.core:jackson-core:2.6.0
+--- com.fasterxml.jackson.core:jackson-annotations:2.6.0
+--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.6.0
| +--- com.fasterxml.jackson.core:jackson-core:2.6.0
| \--- org.yaml:snakeyaml:1.15
+--- org.projectlombok:lombok:1.16.10
+--- javax.validation:validation-api:1.1.0.Final
+--- org.apache.commons:commons-lang3:3.4
+--- org.apache.zookeeper:zookeeper:3.4.5
| +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21
| +--- org.slf4j:slf4j-log4j12:1.6.1
| | +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21
| | \--- log4j:log4j:1.2.16
| +--- log4j:log4j:1.2.15 -> 1.2.16
| +--- jline:jline:0.9.94
| | \--- junit:junit:3.8.1 -> 4.11
| | \--- org.hamcrest:hamcrest-core:1.3
| \--- org.jboss.netty:netty:3.2.2.Final
+--- org.apache.httpcomponents:httpcore:4.4.5 -> 4.4.6
+--- org.apache.httpcomponents:httpclient:4.5.3
| +--- org.apache.httpcomponents:httpcore:4.4.6
| +--- commons-logging:commons-logging:1.2
| \--- commons-codec:commons-codec:1.9
+--- commons-io:commons-io:2.5
+--- org.jdom:jdom2:2.0.5
+--- org.slf4j:slf4j-api:1.7.21
\--- junit:junit:4.11 (*)
testRuntime - Runtime classpath for source set 'test'.
+--- com.google.code.gson:gson:2.2.4
+--- com.fasterxml.jackson.core:jackson-core:2.6.0
+--- com.fasterxml.jackson.core:jackson-databind:2.6.0
| +--- com.fasterxml.jackson.core:jackson-annotations:2.6.0
| \--- com.fasterxml.jackson.core:jackson-core:2.6.0
+--- com.fasterxml.jackson.core:jackson-annotations:2.6.0
+--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.6.0
| +--- com.fasterxml.jackson.core:jackson-core:2.6.0
| \--- org.yaml:snakeyaml:1.15
+--- org.projectlombok:lombok:1.16.10
+--- javax.validation:validation-api:1.1.0.Final
+--- org.apache.commons:commons-lang3:3.4
+--- org.apache.zookeeper:zookeeper:3.4.5
| +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21
| +--- org.slf4j:slf4j-log4j12:1.6.1
| | +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21
| | \--- log4j:log4j:1.2.16
| +--- log4j:log4j:1.2.15 -> 1.2.16
| +--- jline:jline:0.9.94
| | \--- junit:junit:3.8.1 -> 4.11
| | \--- org.hamcrest:hamcrest-core:1.3
| \--- org.jboss.netty:netty:3.2.2.Final
+--- org.apache.httpcomponents:httpcore:4.4.5 -> 4.4.6
+--- org.apache.httpcomponents:httpclient:4.5.3
| +--- org.apache.httpcomponents:httpcore:4.4.6
| +--- commons-logging:commons-logging:1.2
| \--- commons-codec:commons-codec:1.9
+--- commons-io:commons-io:2.5
+--- org.jdom:jdom2:2.0.5
+--- org.slf4j:slf4j-api:1.7.21
\--- junit:junit:4.11 (*)
但我甚至不知道怎么读它......
你可以帮忙吗?答案 0 :(得分:11)
首先,SLF4J是一个简单的 facade ,适用于各种日志框架(例如java.util.logging,logback,log4j),允许最终用户插入所需的日志框架在部署时。
用简单的词语是什么意思?
当您使用SLF4J时,您的代码将依赖于SLF4J(SLF4J-API)提供的一个常见日志记录界面,另一方面,您将选择的日志框架插入SLF4J,这将允许您切换不同的日志记录框架很容易。
因此,在使用SLF4J Facade时,您在代码中使用的所有日志记录调用都将委派给底层日志记录框架。
从插图中可以看出,您的应用每次都使用一个具有不同日志框架的公共API接口SLF4J API
。
现在,让我们看看您的Gradle输出:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/i/.gradle/caches/modules-
2/files-2.1/org.slf4j/slf4j-
log4j12/1.6.1/bd245d6746cdd4e6203e976e21d597a46f115802/slf4j-log4j12-
1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in
[jar:file:/C:/Users/i/.gradle/caches/modules-2/files-
2.1/ch.qos.logback/logback-
classic/1.1.3/d90276fff414f06cb375f2057f6778cd63c6082f/logback-classic-
1.1.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an
explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
SLF4J: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class
path, preempting StackOverflowError.
这是两个不同的SLF4J日志框架绑定的情况,第一个是 org.slf4j / slf4j-log4j12 ,它是LOG4J logging framework绑定,第二个是< strong> ch.qos.logback / logback-classic ,这是Logback logging framework,SLFJ API的原生实现。
因此,为了解决您的问题,您需要在类路径中排除其中一个。
具体来说,有问题的工件是org.apache.zookeeper:zookeeper:3.4.5
,所以让我们排除其中一个日志框架:
dependencies {
compile('org.apache.zookeeper:zookeeper:3.4.5') {
exclude group: 'ch.qos.logback', module: 'logback-classic'
}
//...
}
参考:SLF4J manual
答案 1 :(得分:1)
正如@Vampire所说,这看起来像是buildscript类路径而不是compile
或runtime
配置的问题。它可能可以通过
buildscript {
configurations {
classpath {
exclude group: 'ch.qos.logback', module: 'logback-classic'
// OR
exclude group: 'org.slf4j', module: 'slf4j-log4j12'
}
}
dependencies { ... }
}
答案 2 :(得分:0)
尝试了几件事之后,链接中问题的答案对我有用。
Class path contains multiple SLF4J bindings with Gradle
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.name == 'log4j') {
details.useTarget 'log4j:log4j:1.2.+'
}
}
}
答案 3 :(得分:-1)
您的依赖项动物园还包含org.slf4j:slf4j-api
依赖项。所以只需将其排除
+--- org.apache.zookeeper:zookeeper:3.4.5
| +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21
| +--- org.slf4j:slf4j-log4j12:1.6.1
| | +--- org.slf4j:slf4j-api:1.6.1 -> 1.7.21 # <-- dependency includes slf4j-api
| | \--- log4j:log4j:1.2.16
| +--- log4j:log4j:1.2.15 -> 1.2.16
| +--- jline:jline:0.9.94
| | \--- junit:junit:3.8.1
| \--- org.jboss.netty:netty:3.2.2.Final
+--- org.apache.httpcomponents:httpcore:4.4.5 -> 4.4.6
+--- org.apache.httpcomponents:httpclient:4.5.3
| +--- org.apache.httpcomponents:httpcore:4.4.6
| +--- commons-logging:commons-logging:1.2
| \--- commons-codec:commons-codec:1.9
+--- commons-io:commons-io:2.5
+--- org.jdom:jdom2:2.0.5
+--- org.slf4j:slf4j-api:1.7.21 # <-- Also included as a first tier dependency
在build.gradle
中,只需将其从zookeeper
lib。
dependencies {
compile('org.apache.zookeeper:zookeeper:3.4.5') {
// exclude transitive logging dependency from zookeeper
exclude group: 'org.slf4j'
// might need to exclude log4j, not sure?
exclude group: 'log4j', module: 'log4j'
}
// .. other dependencies
}