这个错误有什么不对

时间:2011-03-23 10:04:12

标签: java spring slf4j

Spring框架抛出

Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;Ljava/lang/Throwable;)V
    at org.apache.commons.logging.impl.SLF4JLocationAwareLog.info(SLF4JLocationAwareLog.java:159)
    at org.springframework.context.support.AbstractApplicationContext.prepareRefresh(AbstractApplicationContext.java:454)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:392)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)

是什么原因?

3 个答案:

答案 0 :(得分:8)

原因是添加了错误的库版本(版本冲突)。

检查slf4j的javadoc版本并尝试弄清楚,此方法与哪个版本存在?

答案 1 :(得分:2)

如果您正在运行OSX,您可能会发现这是因为以下文件包含在Java扩展中:

/Library/Java/Extensions/slf4j-api-1.5.8.jar

/Library/Java/Extensions/slf4j-log4j12-1.5.8.jar

扩展类加载器在应用程序类加载器之前加载它们,因此首先解析它们。

我不知道为什么会有这些或者它们被添加但是我在OSX和去年才看到这个,这可能意味着它们是在java 6中引入的。

您可以删除\移动文件以解决问题,但可能有一些应用程序依赖于它们。

答案 2 :(得分:1)

您可能在类路径中有两次类。

检查事件的类路径。