Java AbstractMethodError由于slf4j api和sl4j标记调用apacheds-all-1.5.5
我犯了一个著名的错误:Java AbstractMethodError由于slf4j api和sl4j标记调用apacheds-all-1.5.5,java,spring,logging,Java,Spring,Logging,我犯了一个著名的错误: 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)
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)
在经历了许多SO问题后,以下是我的进展:
证明我在slf4j api jcl-over-slf4j上使用了相同版本的slf4j(1.5.5,由于以下原因,我不能使用更高版本)mvn.cmd dependency:tree-DskipTests | findstr/R/C:slf4j
- 查找从中加载某些类的类路径,我们会看到以下结果:
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)代码>
pom.xml不包含任何关于appacheds all dependency的内容我知道这可能是一个隐式依赖,但我如何解决这个问题?我也使用相同的依赖,我没有面临任何问题 你能试试下面的吗
<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>
1.5.5
org.slf4j
slf4j api
${org.slf4j版本}
org.slf4j
jcl-over-slf4j
${org.slf4j版本}
运行时
org.slf4j
slf4j-log4j12
${org.slf4j版本}
运行时
log4j
log4j
1.2.15
javax.mail
邮件
javax.jms
jms
com.sun.jdmk
jmxtools
com.sun.jmx
jmxri
运行时
我认为问题在于logback和slf4j之间存在一些依赖项版本不匹配,我会使用slf4j 1.7.25和logback classic 1.2.2,请参阅@RC来完成这项工作。我需要找到一种全局排除appached的方法,以加载其自己的slf4j版本(1.5.5)这是我不知道如何解决的问题,如下面的答案所示,您需要排除所有其他版本的slf4j(请参见您的mvn.cmd dependency:tree
output)。它不起作用,自动添加新版本,您是否知道如何设置全局排除或阻止从apached库加载slf4j 1.5.5(它不包括在pom.xml中的任何位置)我现在已经更改了答案,希望它能起作用。