私はslf4j1.6.1を持っており、Log4j1.2.16がMavenの依存関係に含まれています。以前のプロジェクトでは正常に機能していました。しかし、最近、以前のコードベースの一部を再利用して新しいプロジェクトを開始し、その後、いくつかの奇妙な問題が発生し始めました。
<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もwarファイルに含まれており、おそらく他の依存関係の推移的な依存関係を通じてです。ただし、「mvndependency:tree」を使用して推移的な依存関係を確認したところ、「slf4j-log4j13」が見つかりませんでした。
結果はトリッキーです。WARファイルにslf4j-log4j12とslf4j-log4j13の両方があります。驚いたことに、どういうわけか、それは私のMacOSXシステムでうまく機能しました。正常に動作するということは、それによって引き起こされる競合、例外、またはエラーがないことを意味します。しかし、別の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でのみ発生するのはなぜですか?
それらの1つを削除しようとしました。ただし、どちらかを削除すると問題が発生します。誰かが同じような経験をしたかどうかを確認したいと思います。