web-dev-qa-db-ja.com

複数のSLF4Jバインディングがエラーの原因ですか?

依存関係ツリーと複数のSLF4Jバインディングに問題があります。私がこれまでに発見したことは、通常これは警告を引き起こすだけですが、私の場合は私のプログラムの実行を妨げるようです:これらは私が得る例外です:

SLF4J:クラスパスには複数のSLF4Jバインディングが含まれます。 SLF4J:[jar:file:/ C:/Users/FischerNi/.m2/repository/org/slf4j/slf4j-jdk14/1.5.3/slf4j-jdk14-1.5.3.jar!/ org/slf4j /にバインディングが見つかりましたimpl/StaticLoggerBinder.class] SLF4J:[jar:file:/ C:/Users/FischerNi/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jarにバインディングが見つかりました!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J:説明については http://www.slf4j.org/codes.html#multiple_bindings を参照してください。 SLF4J:slf4j-api 1.6.x(以降)はこのバインディングと互換性がありません。 SLF4J:バインディングはバージョン1.5.5以前です。 SLF4J:バインディングをバージョン1.6.xにアップグレードします。または2.0.xスレッド「main」の例外Java.lang.NoSuchMethodError:org.slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLoggerBinder;

これは私の依存関係の関連部分です:net.lightbody.bmp browsermob-proxy 2.0-beta-8

    <!-- LOGGING DEPENDENCIES - LOG4J -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
    </dependency>

誰かがこの問題を解決する方法を教えてもらえますか?

14
Biffy

これにはいくつかの解決策があります。

  • slf4j jarを1つだけ含む(おそらくより高いバージョンの場合)、クラスパスに異なるバージョンのカップルが含まれている場合は必ず確認してください。
  • クラスパスにある他のjarによって内部的に使用される可能性があるため、複数のslf4j jarを除外できない場合があります。これらの依存jarは、アプリケーションが失敗する原因となるslf4j jarの異なるバージョンを参照する場合があります。そのような場合、SLF4J jarを使用する他のjarの前にSLF4jの上位バージョンが追加されたjarがあることを確認してください。これにより、Javaプログラムが明らかに下位互換性のある最新バージョンのSLF4Jを選択するようになります。
25
Ankur Shanbhag

プロジェクトが他のプロジェクトに依存しており、他のプロジェクトが異なるバージョンのslf4jを使用している場合は、excusionを使用してみてください

<exclusions>
   <exclusion>
       <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </exclusion>
</exclusions>
4
Fateh

Fatehからの答えは正しいです。私はそれを使用する方法を理解するために時間を費やさなければならなかったので、完全なソリューションを追加しています。

  1. 実行mvn dependency:tree

  2. slf4jを使用しているライブラリを確認します。

    [INFO] +- net.lightbody.bmp:browsermob-proxy:jar:2.0-beta-8:compile
    [INFO] |  +- org.slf4j:slf4j-jdk14:jar:1.7.25:compile
    
  3. 次のようにMavenから除外します。

         <dependency>
            <groupId>net.lightbody.bmp</groupId>
            <artifactId>browsermob-proxy</artifactId>
            <version>2.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-jdk14</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
3
Hans Pour

代わりに、Mavenで次の依存関係を使用することをお勧めします。

<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>

Slf4jを使用して依存関係を増やしていますが、これで問題が解決しました。

1
t.rakesh

クラスパスで複数のバインディングが使用可能な場合、使用するバインディングを1つだけ選択し、他のバインディングを削除します。

「org.slf4j」または「log4j2」の明示的に追加された依存関係を削除してみてください。

0
Akanksha Sharma

これは、複数のjarがある場合に発生します。 jarがすでに使用可能かどうかを確認するには、プロジェクト-> Java resources-> maven依存関係に移動し、jarがすでに使用可能かどうかを確認します。次に、.m2\resourcesフォルダーでそのjarファイルの場所を見つけ、そのjarファイルに関連する完全なフォルダーを削除してから、新しいバージョンをダウンロードしてプロジェクトにインポートします。

Pom.xmlファイルに正しいバージョンの正しいjarファイルをダウンロードしていても、エラーが発生する場合があります。それから、pom.xmlからそれを削除し、Googleからそのjarをダウンロードして、プロジェクトにインポートする必要があります。それを行う場合は、プロジェクトプロパティ->デプロイメントアセンブリタブ->追加->をクリックすることを忘れないでくださいJavaビルドパスエントリとそのjarファイルをクリックして、[適用]をクリックします。

0
Hamza