1. ホーム
  2. Java

Java の例外 #クラスパスが複数の SLF4J バインディングを含んでいます。

2022-02-25 14:14:20
<パス

1. 例外事項

Mavenプロジェクトの起動時に、警告メッセージが表示されます。

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/Tp_Mylocal/20_Install/maven/repo/org/slf4j/slf4j-log4j12/1.7.20/slf4j-log4j12-1.7.20.jar!/org/ slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/Tp_Mylocal/20_Install/maven/repo/ch/qos/logback/logback-classic/1.1.7/logback-classic-1.1.7.jar! /org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path, preempting StackOverflowError. 
SLF4J: See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details.


2. 徹底的な分析

報告された警告メッセージから、一般的には次のような意味があります。 pom.xml で紹介されたパッケージは slf4j-log4j12-1.7.20.jar とパッケージ logback-classic-1.1.7.jar /org/slf4j/impl/StaticLoggerBinder.class このクラス、どちらを使えばいいのかわからず、コンフリクトしている。

3. 解決方法

jar パッケージの競合なので、pom.xml ファイルを見つけてトラブルシュートしてみましょう。
1) を検索します。 pom.xml ファイルを開き、右クリックで [ Diagrams ] -> [ Show Dependencies ]
2) 複雑に絡み合う依存関係グラフが飛び出し、泣き笑いするほど衝撃的な展開に

3) 攻撃するには、Ctrl + Fで、slf4j-log4j12を検索し、右クリックで除外します。

さて、pom.xml ファイルを見ると、先ほど除外した jar に対して除外コードが自動生成されています、例えば。

org.apache.zookeeper
    
zookeeper
    
${zookeeper.version}
    
slf4j-log4j12
            
org.slf4j
        
    



また、手動で新しい行を pom.xml ファイルを使用して、依存関係を除外することができます。

<マーク 注意事項

  1. log4j-over-slf4j.jar slf4j-log4j12.jar は、Javaのロギングシステムに関連する2つのjarパッケージであり、これらが両方ともクラスパス下に存在する場合、スタックオーバーフロー例外を引き起こす可能性があります。
  2. ログバックロギングを使用している場合、除外されるのは slf4j-log4j12.jar パッケージでは logback-classic.jar パッケージを使用します。