2017-03-28 20 views
0

我登上了著名的錯誤:AbstractMethodError由於SLF4J API和sl4j標記呼叫ApacheDS中,所有1.5.5

java.lang.AbstractMethodError: ch.qos.logback.classic.Logger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;Ljava/lang/Throwable;)V 
at org.apache.commons.logging.impl.SLF4JLocationAwareLog.debug(SLF4JLocationAwareLog.java:120) 

要通很多在這裏做題之後是我的進步:

  • mvn.cmd dependency:tree -DskipTests | findstr /R /C:slf4j證明,我使用SLF4J的API,JCL-過SLF4J SLF4J相同版本(1.5.5,我不能使用更高版本的堂妹以下)
  • 尋找類路徑,其中一些類從我們這裏加載E以下結果:

    debugJars(org.slf4j.spi.LocationAwareLogger.class); debugJars(org.apache.commons.logging.impl.SLF4JLocationAwareLog.class); debugJars(org.slf4j.Marker.class);

    debugJars(ch.qos.logback.classic.Logger.class);

返回:

file:/C:/Users/User/.m2/repository/org/apache/directory/server/apacheds-all/1.5.5/apacheds-all-1.5.5.jar!/org/slf4j/spi/

file:/C:/Users/User/.m2/repository/org/slf4j/jcl-over-slf4j/1.5.5/jcl-over-slf4j-1.5.5.jar!/org/apache/commons/logging/impl/

file:/C:/Users/User/.m2/repository/org/apache/directory/server/apacheds-all/1.5.5/apacheds-all-1.5.5.jar!/org/slf4j/

file:/C:/Users/User/.m2/repository/ch/qos/logback/logback-classic/1.1.2/logback-classic-1.1.2.jar!/ch/qos/logback/classic/

如何獲得的擺脫這種ApacheDS中,所有覆蓋我正確的事實sl4j的依賴關係?

pom.xml不包括關於appacheds的所有依賴我明白它可能是一個隱式依賴,但我該如何解決這個問題?

+0

我認爲這個問題是的logback和SLF4J之間的一些依賴版本不匹配,我會SLF4J 1.7使用。 25和logback-classic 1.2.2,請參閱http://search.maven.org/#artifactdetails%7Cch.qos.logback%7Clogback-parent%7C1.2.2%7Cpom –

+0

@RC以使這項工作我需要找到一個方式來全球排除appached加載其自己版本的slf4j(1.5.5),這是我不知道該怎麼做 – simpnsc

+0

使用''如下面的答案所示,您需要排除所有其他版本的slf4j(請參閱你的vn.cmd dependency:tree' output) –

回答

0

我也使用了相同的依賴,我沒有遇到任何問題 你可以試試下面的

<org.slf4j-version>1.5.5</org.slf4j-version> 

<!-- Logging --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>${org.slf4j-version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jcl-over-slf4j</artifactId> 
      <version>${org.slf4j-version}</version> 
      <scope>runtime</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>${org.slf4j-version}</version> 
      <scope>runtime</scope> 
     </dependency> 

<dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.15</version> 
      <exclusions> 
       <exclusion> 
        <groupId>javax.mail</groupId> 
        <artifactId>mail</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>javax.jms</groupId> 
        <artifactId>jms</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>com.sun.jdmk</groupId> 
        <artifactId>jmxtools</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>com.sun.jmx</groupId> 
        <artifactId>jmxri</artifactId> 
       </exclusion> 
      </exclusions> 
      <scope>runtime</scope> 
     </dependency> 
+0

它不起作用,新版本會自動添加,你有什麼想法來設置全局排除或什麼來停止從apached庫加載slf4j 1.5.5(它是不包括在我的pom.xml中的任何地方) – simpnsc

+0

我已經改變了我的答案,現在我希望它能夠工作。 –