2011-12-03 67 views
1

我正在使用Spring(3.0.5.RELEASE)創建&管理一些bean,並且出現了一些非常奇怪的運行時錯誤。調試奇怪的彈簧/ SLF4J/Jar問題

我第一次運行代碼時,我使用的是slf4j-api-1.5.11,我得到了如下所示的錯誤。我在網上做了一個快速閱讀,看起來MessageFormatter.format(String,Object,Object)方法直到版本1.6才被添加到SLF4J。所以對我來說很明顯,依賴於我的依賴關係圖中的某個地方,根據1.6+版本的SLF4J,我有一些組件(Spring,Camel或其他一些可能性)。

我從我的構建路徑中刪除了1.5.11,並將其替換爲1.6.2,並重新構建。仍然得到相同的錯誤。我已經在1.6.2 Jar中檢查了類文件,它確實包含了該方法。我檢查了我的類路徑設置,我的常春藤設置(我用於依賴管理),我甚至嘗試清理項目(Eclipse)並從乾淨狀態運行。

我開始認爲這可能是一個「Eclipse事物」。但是我將它打包成WAR並部署到Tomcat; Eclipse與它無關。

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messagehandler' defined in ServletContext resource [/WEB-INF/spring-config.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.tms.relay.web.RelayWebIngestMessageHandler]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.format(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Lorg/slf4j/helpers/FormattingTuple

任何想法?在線搜索沒有提出任何建議,除非明顯(更新Jar)。提前致謝!

+0

你使用什麼實現?只是API ...呃,只是API。 –

+0

使用log4j綁定 – IAmYourFaja

回答

0

Ran Ivy以詳細模式解決。原來我的依賴關係圖裏面有一個組件,導致Ivy驅逐SLF4J(1.6.2)的最新版本,並強迫它使用舊版本(1.5.11)。

常春藤新手的故事道德:如果有東西感覺不像它的工作權限,請在詳細(-v)模式下運行常春藤。

+0

我不明白你如何檢查WAR並找到正確的JAR文件... – jtoberon

0

我會嘗試以下方法:

(1)解壓縮WAR,並確保它的內容是你所期望的。特別檢查SLF4J JAR文件。 (2)檢查WAR後,刪除Tomcat爆炸WAR文件的目錄,然後重新啓動Tomcat。這應該會導致Tomcat重新部署應用程序。這不太可能有幫助,但我會盡早排除。 (3)在Tomcat的特殊目錄 - $ CATALINA_HOME/lib,shared/lib和/或shared/classes中檢查JAR的舊版本。有關Tomcat的類路徑的更多細節可以在here找到。關於Tomcat 7的信息可以在herethere找到。

瞭解您所在的操作系統可能很有用。另外,Tomcat是如何安裝的,以及自那時起定製了什麼(例如啓動腳本)?

+0

是的,我已經排除#1和#2了,但現在檢入#3。我相信我已經搜索了整個Tomcat目錄中的SLF4J實例,但找不到任何實例。使用7.0.19版 - 我會繼續尋找並讓你知道我找到了什麼。謝謝! – IAmYourFaja

+0

你在使用什麼操作系統?你在找什麼?我已經將Tomcat 7的細節添加到了答案中。 – jtoberon