2011-03-23 122 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