解决方法一:
今天在做系统集成的时候,引入第三方功能jar的时候,项目启动不起来了,基本上就三个问题。
java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.format java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.Log4jLoggerFactory java.lang.AbstractMethodError: org.slf4j.impl.JDK14LoggerAdapter.log
百度,加上不停的测试,搞了一个多小时,终于能启动了。
归纳为两点:
一)存在多个版本的log4j,或者slf4j
二)log4j和slf4j中有些jar包冲突
把项目中的关于log4j和slf4j的jar包都清掉,然后从
下载一个最新的版本,丢到lib下,清单如下:
log4j-over-slf4j-1.7.5.jar slf4j-api-1.7.5.jar slf4j-jdk14-1.7.5.jar slf4j-nop-1.7.5.jar
网上查的一些解释:
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory,
这是因为项目缺少slf4j-api.jar和slf4j-log4j12.jar这两个jar包导致的错误。
java.lang.NoClassDefFoundError: org/apache/log4j/LogManager,
这是因为项目缺少log4j.jar这个jar包
究其原因是如果log4j-over-slf4j.jar 和 slf4j-log4j12.jar 在同一个classpath下就会出现这个错误。
其中log4j-over-slf4j.jar的作用是通过Log4j进行logback slf4j共存时bridge的作用。
slf4j-log4j12.jar用途在于slf4j通过slf4j-log4j12调度log4j
去除slf4j-log4j12.jar就可以了。
解决方法二
2014/6/13
今天我用maven构建了一个项目,也报了java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.format
我刚开始也以为是版本冲突
pom.xml如下:
<log4j.version>1.2.17</log4j.version> <slf4j.version>1.7.7</slf4j.version> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency>
在Maven Dependencies中
我发现log4j.jar在sl4j.jar的上方
我去maven官网 搜索了下发现slf4j-log4j12已经依赖了log4j
<parent> <groupId>org.slf4j</groupId> <artifactId>slf4j-parent</artifactId> <version>1.7.7</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <packaging>jar</packaging> <name>SLF4J LOG4J-12 Binding</name> <description>SLF4J LOG4J-12 Binding</description> <url>http://www.slf4j.org</url> <dependencies> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </dependency> </dependencies>
然后我就将我的pom.xml中的log4j依赖注释掉了
然后我再启动不报错了
最后在Maven Dependencies中
我发现log4j.jar跑到了sl4j.jar的下方
由此推断java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.format这个错误应该是sl4j和log4j的顺序有关
文章评论
多谢!