2010-09-29 60 views
0

我有slf4j 1.6.1和Log4j 1.2.16包含在我的maven dependencies中。它曾經在以前的項目中工作得很好。然而,最近我通過重用以前的代碼庫開始了一個新項目,然後開始出現一些奇怪的問題。slf4j-log4j13和slf4j-log4j12之間的衝突

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.16</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.6.1</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
    <version>1.6.1</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.solr</groupId> 
    <artifactId>solr-solrj</artifactId> 
    <version>1.4.1</version> 
</dependency> 

基本上發生的事情是,不知何故SLF4J-log4j13也被納入了戰爭的文件,很可能將向您介紹一些其他依賴的一些傳遞依賴關係。但是,當我使用「mvn dependency:tree」來檢查傳遞依賴性時,我沒有找到「slf4j-log4j13」。

結果很棘手。我的戰爭文件中有slf4j-log4j12和slf4j-log4j13。令人驚訝的是,它在我的Mac OSX系統上運行良好,不知何故。通過正常工作,我的意思是沒有任何衝突,例外或錯誤造成的。但是,當我將它部署到另一臺Linux(Ubuntu)64位機器時,它給我帶來了麻煩。唯一的例外是如下,

'xmlResponseParser' while setting bean property 'parser'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xmlResponseParser' defined in ServletContext resource [/WEB-INF/spring/spring-solr.xml]: Instantiation of bean failed; nested exception is java.lang.NoSuchMethodError: org.apache.log4j.Logger.log(Ljava/lang/String;Lorg/apache/log4j/Level;Ljava/lang/Object;Ljava/lang/Throwable;)V 
(Stack trace ignored) 

貌似xmlResponseParser使用SLF4J但找不到log4j的依賴。這是由slf4j-log4j12和slf4j-log413之間的衝突引起的嗎?爲什麼它只發生在Linux上?

我試圖刪除其中的一個;但是,刪除其中任何一個都會導致問題。我想看看有沒有人有類似的經歷。

回答

0

問題解決了。 slf4j-log4j13靜態地包含在webapp/WEB-INF/lib中,不直接由maven管理。