我已经在第三天犯了这个错误,我无法解决。有些东西我无法掌握,无论我做什么,错误仍然存在。
我正在读一本名为"詹金斯的权威指南" (http://www.wakaleo.com/books/jenkins-the-definitive-guide)并且我坚持第二章。基本上是一个如何使用Jenkins与Jenkins的Javadoc,JUnit和Cobertura插件的例子。一切正常,直到我到Cobertura插件部分,我得到下一个错误:
[ERROR] SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Windows/System32/config/systemprofile/.m2/repository/ch/qos/logback/logback-classic/1.0.13/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Windows/System32/config/systemprofile/.m2/repository/org/slf4j/slf4j-simple/1.6.1/slf4j-simple-1.6.1.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 [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
我已经看到了像我这样的其他问题,我得到的结论是我要在我的pom.xml文件中包含o排除依赖关系(这个例子在这个阶段只使用pom文件)。我的 slf4j-simple 的pom.xml文件如下所示:
<project>
......
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
</dependency>
</dependencies>
</project>
并且没有明确依赖 logback-classic 因此我不知道正在使用什么依赖项。我试图为jenkins使用依赖插件,我得到了这个结果:
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ gameoflife-web ---
[INFO] com.wakaleo.gameoflife:gameoflife-web:war:1.0-SNAPSHOT
[INFO] +- com.wakaleo.gameoflife:gameoflife-core:jar:1.0-SNAPSHOT:compile
[INFO] +- org.springframework:spring-webmvc:jar:3.0.2.RELEASE:compile
[INFO] | +- org.springframework:spring-asm:jar:3.0.2.RELEASE:compile
[INFO] | +- org.springframework:spring-beans:jar:3.0.2.RELEASE:compile
[INFO] | +- org.springframework:spring-context:jar:3.0.2.RELEASE:compile
[INFO] | | \- org.springframework:spring-aop:jar:3.0.2.RELEASE:compile
[INFO] | +- org.springframework:spring-context-support:jar:3.0.2.RELEASE:compile
[INFO] | \- org.springframework:spring-expression:jar:3.0.2.RELEASE:compile
[INFO] +- org.springframework:spring-core:jar:3.0.2.RELEASE:compile
[INFO] | \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] +- org.springframework:spring-web:jar:3.0.2.RELEASE:compile
[INFO] | \- aopalliance:aopalliance:jar:1.0:compile
[INFO] +- javax.servlet:jstl:jar:1.2:compile
[INFO] +- javax.servlet:servlet-api:jar:2.5:provided
[INFO] +- org.mockito:mockito-all:jar:1.8.5:test
[INFO] +- org.easytesting:fest-assert:jar:1.4:compile
[INFO] | \- org.easytesting:fest-util:jar:1.1.6:compile
[INFO] +- org.slf4j:slf4j-simple:jar:1.6.1:compile
[INFO] +- org.slf4j:slf4j-api:jar:1.6.1:compile
[INFO] +- junit:junit:jar:4.11:test
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] \- org.hamcrest:hamcrest-all:jar:1.1:test
也许我是盲人,但我仍然无法看到谁使用 logback-classic (顺便说一句,我不确定哪些值对于 logback-classic 的和 。 我试图删除 slf4j 依赖关系,我的错误消失了,但我没有得到任何cobertura报告。我尝试用
排除 logback-classic <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.6.1</version>
<exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
<exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
</dependency>
并且错误仍然存在。 我不知道该怎么做了,请帮忙!
答案 0 :(得分:1)
好消息是,即使SLF4J报告错误,它实际上也会警告您SLF4J将绑定到ch.qos.logback.classic.util.ContextSelectorStaticBinder
,因为类路径上有两个绑定可用。 SLF4J将选择类路径上可用的第一个。您的应用程序应该继续正常工作,尽管使用logback进行日志记录。
我无法告诉您为什么 logback-classic.jar 在类路径上,但我建议您调查一下&#34;系统配置文件&#34;在课程路径中提到。
答案 1 :(得分:0)
您正尝试从slf依赖项本身中排除logback-classic。问题是如前所述[{3}},您在类路径中使用了多个绑定。实际的方法是在使用它的依赖项中保留logback-classic的排除,而不是在slf4j依赖项中。不幸的是,我不确定你的哪个罐子正在引用slf4j导致问题。一种解决方法是,使用Ctrl + Sft + T在不同的jar中查看StaticLoggerBinder类的存在,并将logback-classic排除在其中。其他解决方法是,您可以尝试保持排除,作为试验和错误。这些只是解决方法,但概念是相同的。我们需要在类路径中找到引用logback-classic的其他依赖项