1

querydsl (sl4j-api 1.6 に依存) と arquillian-persistence-api (slf4j-jdk14 1.5.6 に依存) を使用しています。Maven で古いバージョン 1.5.6 を無視すると、JBoss で次のメッセージが表示されます

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

テスト用にマネージド JBoss AS 7.1 で arquillian を使用しています (Maven は maven central からバージョンをダウンロードし、テストを実行します)。また、arquillian 永続化 API を使用しています。

与えられた警告を修正するにはどうすればよいですか? どちらの依存関係を保持する必要があるか、または両方を適切に機能させるにはどうすればよいですか?

これが、arquillian 永続化 API の失敗に関するエラー メッセージが表示されない理由だと思います (ロガーが機能していないためですか?)。

4

3 に答える 3

2

初めに。依存関係について。

SLF4J を追加するには、これらの依存関係を 1 つだけ pom.xml に配置する必要があります。どの実装を使用するかによって異なります。pom.xml に追加するすべての依存関係は、クラスパスに自動的に追加されます。以下の依存関係のいずれかが別の依存関係によって提供されている場合は、それを省略できます。依存関係が別の依存関係によって提供されている場合でも、含める必要があるのは 1 つだけであることを忘れないでください。

<dependency>
   <groupId>ch.qos.logback</groupId>
   <artifactId>logback-classic</artifactId>
   <version></version>
</dependency>
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-simple</artifactId>
   <version></version>
   <scope>compile</scope>
</dependency>
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>log4j-over-slf4j</artifactId>
   <version></version>
   <scope>compile</scope>
</dependency>
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-jdk14</artifactId>
   <version></version>
   <scope>compile</scope>
</dependency>

Maven プロジェクトのビルド時に発生する厄介なエラーについて説明します。上記の依存関係の 1 つだけを取得した後でも、SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder" が表示される場合。次に、m2e のバグに直面しています。

バンドルされている Maven バージョン (m2e) を使用している場合、Eclipse Juno および Indigo はメッセージ SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder" を抑制しません。この動作は、m2e バージョン 1.1.0.20120530-0009 以降から存在します。

ただし、これはエラーとして示されますが、ログは正常に保存されます。強調表示されたエラーは、このバグが修正されるまで引き続き表示されます。詳細については、m2e サポート サイトを参照してください。

現在利用可能な解決策は、バンドルされたバージョンの Eclipse ではなく、外部の Maven バージョンを使用することです。この解決策とこのバグに関する詳細については、以下の質問で見つけることができます。これは、直面している同じ問題を説明していると思います。

SLF4J: クラス "org.slf4j.impl.StaticLoggerBinder" のロードに失敗しました。エラー

于 2013-03-01T17:52:34.270 に答える
2

表示されているメッセージは警告であり、エラーではありません。自分でバインディングを選択していないため、SLF4J がバインディングを選択していることを意味します。デフォルトのバインドでは、すべてのログ メッセージが単に破棄されるため、あまり役に立ちません。

Maven に競合するバージョンがある場合、通常は新しいバージョンを強制する方が安全です。ライブラリは多くの場合、下位互換性があります。

したがって、新しいバージョンの に固執しslf4j-api、バインディングを依存関係として宣言するようにしてくださいslf4j-jdk14。ライブラリを作成している場合は、バインディングがtestスコープのみで宣言されていることを確認してください。

于 2013-02-24T07:56:19.367 に答える
0

JBoss 7.1 には SLF4J のサポートが組み込まれています。これが、追加する WAR パッケージを含む Web アプリケーションであると仮定しますsrc/main/webapp/WEB-INF/jboss-deployment-structure.xml

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
  <deployment>
    <dependencies>
      <module name="org.slf4j" />
    </dependencies>
  </deployment>
</jboss-deployment-structure>

これにより、JBoss SL4J アダプターが取り込まれ、ログ出力が得られます。

これは、SLF4J 用にアプリケーション サーバーが提供するライブラリを使用することを意味します。pom.xmlSLF4J 依存関係の範囲を修正するには、を更新する必要があります。

<dependencies>
  ...
  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <scope>provided</scope>
  </dependency>
  ...
</dependencies>

POM ファイルの配置方法によっては、使用する SLF4J のバージョンも指定する必要がある場合があります。mvn dependency:treeどの SLF4J dep がプルされているかを表示できます。それらがすべて「提供された」スコープを取得していることを確認してください。Eclipse と m2e プラグインを使用している場合は、POM ファイルを開いて「依存関係階層」タブを確認すると、同様の情報が表示されます。

于 2013-02-26T10:59:46.387 に答える