2015-05-28 2 views
2

У меня с этой ошибкой уже третий день, и я не могу решить. Есть что-то, чего я не могу понять, и что бы я ни делал, ошибка все еще сохраняется.ОШИБКА SLF4J: Путь к классу содержит несколько привязок SLF4J jenkins cobertura maven

Я читаю книгу под названием «Дженкинс - окончательный путеводитель» (http://www.wakaleo.com/books/jenkins-the-definitive-guide), и я застрял на второй главе. В основном это пример того, как использовать Jenkins с Javadoc, JUnit и Cobertura плагин для Jenkins. Все работает, пока не дойду до 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] 

Я видел другие проблемы, как у меня и заключение я получил то, что я должен либо включить о исключить зависимость в моем П. xml file/s (в этом примере на этом этапе используются только файлы pom). Мой файл pom.xml, который имеет SLF4J-простой выглядит следующим образом:

<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-классический поэтому я не знаю, в какой зависимости используется. Я пытался использовать плагин зависимостей для Дженкинс и я получил этот результат:

[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-классический (кстати, я не уверен, какие значения верны для и для logback-classic). Я попытался удалить slf4j зависимостей, и я ошибся, но я не получаю никаких сообщений cobertura. Я попытался исключить Logback-классический с

<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

Возможный дубликат [Разрешить множественные привязки SLF4J в проекте maven] (http://stackoverflow.com/questions/11758676/resolve-multiple-slf4j-bindings-in-maven-project) –

+0

Да, возможно, это возможно повторяю, когда я точно знаю, я его обновлю. –

ответ

0

Вы пытаетесь исключить классический журнал из самой зависимости slf. Проблема в том, что, как упоминалось, here, вы использовали более одного привязки в своем пути к классу. Фактический способ состоит в том, чтобы сохранить исключение для logback-classic, в зависимости, которая его использует, а не в вашей зависимости slf4j. К сожалению, я не уверен, какие из ваших банок имеют ссылку на slf4j, что вызывает проблему. Один способ обхода - использовать Ctrl + Sft + T, чтобы увидеть существование класса StaticLoggerBinder в разных баночках и поместить в него исключение logback-classic. Другая работа вокруг, вы можете попытаться сохранить исключение, как проб и ошибок. Это просто работа вокруг, но концепция такая же. Нам нужно найти другую зависимость, которая ссылается на logback-classic в вашем пути к классу.

+0

, когда вы говорите «используйте Ctrl + Sft + T», что именно вы имеете в виду? Где я должен его использовать? В моем редакторе? Я не знаю этого ключевого ярлыка. –

+0

Используется для поиска ресурса в рабочем пространстве, включая банки. – Ramzy

+0

Я просто попробовал Ctrl + Sft + T, и он * StatigLoggerBinder * не появляется. Одна из трудностей, которые я испытываю, заключается в том, что код не мой, из книги я добавил все пакеты, в которых отсутствует (по крайней мере, все, что я мог найти), и мне не повезло. Думаю, мне следовало бы попробовать метод проб и ошибок. Есть ли другие способы узнать о переизбраниях? Большое спасибо. –

0

Хорошей новостью является то, что даже если SLF4J сообщает об ошибке, это на самом деле предупреждает вас о том, что SLF4J будет привязан к ch.qos.logback.classic.util.ContextSelectorStaticBinder, поскольку имеется две привязки на пути к классу. SLF4J выберет первый доступный на пути к классу. Ваше приложение должно продолжать работать только отлично, хотя и регистрируясь с помощью журнала.

Я не могу сказать вам, почему logback-classic.jar находится на пути к классу, но я предлагаю вам изучить «Системный профиль», упомянутый в пути к классу.

+0

Ну, я не получаю сообщение cobertura, и эта ошибка является единственной очевидной причиной этого. Я исследую «Системный профиль» и вернусь к своим выводам. Большое спасибо. –

Смежные вопросы