SpringのSLF 4 Jにおける複数のバインディング衝突問題
問題
Mavenが管理する純Springプロジェクトでは、本来はロゴ4 jを使用していたが、結果として依存していたライブラリ(coree-dataプロジェクト)には、またlogbackファイル(logbackと元のlogback 4 jは2つしか選択できない)を引用して配置が無効になった.
以下は複数のlib衝突です.
方法一(暴力法)
プロジェクトを展開した後、余分なlibファイルを削除し、簡単にshellファイルに保存して、配置スクリプトを自動起動します.
pom.xmlファイルの中でexclusionは衝突のカバンを排除して、coree-dataの主なプロジェクトに対する影響を避けるために、SLF 4 Jに関するカバンを排除しました.具体的にpom.xmlファイルの中で再排除を確認します.
問題の根源は依頼のライブラリ自体が規範ではなく、具体的なSLF 4 Jのライブラリを含んではいけません.元開発者に処理させてもいいです.
その他:Spring-MVCはもっと簡潔な方式があります.
余談をする
プログラミングの規範や、特にプロジェクトの規模が大きくなってから、守らない規範が効率に大きな影響を与えました.
参照
[1]sf 4 jログの使用[2]stackover flowで回答[3]なぜLog 4 JではなくSLF 4 Jを使うのですか?
Mavenが管理する純Springプロジェクトでは、本来はロゴ4 jを使用していたが、結果として依存していたライブラリ(coree-dataプロジェクト)には、またlogbackファイル(logbackと元のlogback 4 jは2つしか選択できない)を引用して配置が無効になった.
以下は複数のlib衝突です.
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/app/top-media-frag/lib/logback-classic-1.0.13.
jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/app/top-media-frag/lib/slf4j-log4j12-1.7.5.jar
!/org/slf4j/impl/StaticLoggerBinder.class]
解決方法方法一(暴力法)
プロジェクトを展開した後、余分なlibファイルを削除し、簡単にshellファイルに保存して、配置スクリプトを自動起動します.
rm -f -v logback*
方法二(調和法)pom.xmlファイルの中でexclusionは衝突のカバンを排除して、coree-dataの主なプロジェクトに対する影響を避けるために、SLF 4 Jに関するカバンを排除しました.具体的にpom.xmlファイルの中で再排除を確認します.
<dependency>
<groupId>com.nickwongfree.mpgroupId>
<artifactId>core-dataartifactId>
<version>1.1version>
<exclusions>
<exclusion>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-classicartifactId>
exclusion>
<exclusion>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-coreartifactId>
exclusion>
<exclusion>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
exclusion>
exclusions>
dependency>
方法三(押し鍋法)問題の根源は依頼のライブラリ自体が規範ではなく、具体的なSLF 4 Jのライブラリを含んではいけません.元開発者に処理させてもいいです.
その他:Spring-MVCはもっと簡潔な方式があります.
余談をする
プログラミングの規範や、特にプロジェクトの規模が大きくなってから、守らない規範が効率に大きな影響を与えました.
参照
[1]sf 4 jログの使用[2]stackover flowで回答[3]なぜLog 4 JではなくSLF 4 Jを使うのですか?