2011-03-23 116 views
7

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) 

有什么原因呢?

回答

8

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

检查版本slf4j的javadoc并试图弄清楚,这种方法存在哪个版本?

1

您可能在classpath中有两次类。

检查类路径的出现次数。

2

如果你正在运行OSX你会发现这是因为以下文件包含的Java扩展:

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

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

这些由扩展类加载器加载,在应用程序类加载器之前加载,所以这些将首先被解析。

我不知道为什么这些是有或当他们加入,但我只看到这个在OSX和在去年,这可能意味着他们在Java中引入6.

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

+0

现货在我的情况!谢谢! – 2016-10-14 05:28:03