6

私は Java プロジェクトに取り組んでおり、Maven (m2e) でビルドしています。私が行うと、mvn clean install最初にこのエラーが発生します:

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.

最初に、ログは問題ないようです (非常に基本的なことです)。しかし、私は自分のビルドでエラーが発生するのが好きではないので、URL をたどりました。基本的に、クラスはいくつかのパッケージのいずれかにあると書かれているのでslf4j-simple、依存関係に追加しました。どのバージョンを使用すればよいかわからなかったので、最新 (1.7.1) を入手しました。エラーは消えませんでした。

私の依存関係 (JXL) の 1log4jつにはバージョン 1.2.14 が必要なようで、これがslf4j. これを変えることはできないと思います(できますか?)。私の考えではslf4j、バージョンが間違っている可能性がありますが、必要なバージョンを特定する方法がわかりませんlog4j

まず、私に問題がありますか?そして第二に、私がそうでなくても、警告を取り除く方法はありますか?

の出力は次のmvn dependency:treeとおりです。

[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ dpt ---
[INFO] com.nike.dpt:dpt:war:1.3-SNAPSHOT
[INFO] +- javax.servlet:jsp-api:jar:2.0:provided
[INFO] +- javax.servlet:servlet-api:jar:2.5:provided
[INFO] +- javax.servlet:jstl:jar:1.2:runtime
[INFO] +- net.sourceforge.jexcelapi:jxl:jar:2.6.12:compile
[INFO] |  \- log4j:log4j:jar:1.2.14:compile
[INFO] +- commons-dbcp:commons-dbcp:jar:1.4:compile
[INFO] |  \- commons-pool:commons-pool:jar:1.5.4:compile
[INFO] +- org.springframework:spring-core:jar:3.1.2.RELEASE:compile
[INFO] |  +- org.springframework:spring-asm:jar:3.1.2.RELEASE:compile
[INFO] |  \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] +- org.springframework:spring-tx:jar:3.1.2.RELEASE:compile
[INFO] |  +- aopalliance:aopalliance:jar:1.0:compile
[INFO] |  +- org.springframework:spring-aop:jar:3.1.2.RELEASE:compile
[INFO] |  \- org.springframework:spring-beans:jar:3.1.2.RELEASE:compile
[INFO] +- org.springframework:spring-aspects:jar:3.1.2.RELEASE:compile
[INFO] |  \- org.springframework:spring-context-support:jar:3.1.2.RELEASE:compile
[INFO] +- org.springframework:spring-jdbc:jar:3.1.2.RELEASE:compile
[INFO] +- org.springframework:spring-web:jar:3.1.2.RELEASE:compile
[INFO] +- org.springframework:spring-webmvc:jar:3.1.2.RELEASE:compile
[INFO] |  \- org.springframework:spring-expression:jar:3.1.2.RELEASE:compile
[INFO] +- org.springframework:spring-context:jar:3.1.2.RELEASE:compile
[INFO] +- org.springframework.security:spring-security-core:jar:3.1.0.RELEASE:compile
[INFO] |  \- org.springframework.security:spring-security-crypto:jar:3.1.0.RELEASE:compile
[INFO] +- org.springframework.security:spring-security-config:jar:3.1.0.RELEASE:compile
[INFO] +- org.springframework.security:spring-security-web:jar:3.1.0.RELEASE:compile
[INFO] +- com.vaadin:vaadin:jar:6.8.2:compile
[INFO] +- com.google.gwt:gwt-user:jar:2.4.0:provided
[INFO] |  +- javax.validation:validation-api:jar:1.0.0.GA:provided
[INFO] |  \- javax.validation:validation-api:jar:sources:1.0.0.GA:provided
[INFO] +- org.aspectj:aspectjrt:jar:1.7.0:compile
[INFO] +- org.aspectj:aspectjweaver:jar:1.7.0:compile
[INFO] +- junit:junit:jar:4.10:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.1:test
[INFO] +- org.mockito:mockito-all:jar:1.9.0:test
[INFO] +- cglib:cglib-nodep:jar:2.2.2:compile
[INFO] +- com.oracle:ojdbc14:jar:10.2.0.4.0:compile
[INFO] +- org.vaadin.addons:filteringtable:jar:0.5.3:compile
[INFO] +- org.vaadin.addons:popupbutton:jar:1.2.1:compile
[INFO] \- org.slf4j:slf4j-simple:jar:1.7.1:compile
[INFO]    \- org.slf4j:slf4j-api:jar:1.7.1:compile

Maven プラグイン (m2e) を使用して Eclipse (Juno) IDE で実行しています。Maven に使用している CLI はmvn clean package taomcat7:runormvn clean install tomcat7:runです。コマンド ラインから Maven を呼び出すと、slf4j エラーが表示されないため、Eclipse のセットアップに関係している可能性がありますm2e

4

4 に答える 4

8

エラー メッセージはプロジェクトとは関係ありません。これは m2e の問題であり、害はありません。Eclipse 以外のコマンドラインでビルドする場合は表示されません。

これにはバグがありますが、残念ながら、彼らは修正するよりも人々を混乱させようとしています:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=387064

于 2012-10-31T08:15:09.107 に答える
1

の出力はmvn dependency:tree、slf4j-apiとslf4j-simpleの両方がクラスパス上にあることを明確に示しています。SLF4Jが見つからないと文句を言うという事実は、クラスパスのどこかにslf4j-api.jarorg.slf4j.impl.StaticLoggerBinderの別のコピーがあり、これがメモリにロードされているコピーであることを意味します(com.nike.dptのslf4j-api.jarのコピーではありません:dpt:war)。このような状況では、多くのアプリケーションサーバーのクラスローダー委任モデルのため、サーバーのslf4j-apiのコピーによってロードされたクラスは、Webアプリにあるslf4j-simple.jarにパッケージ化されたクラスを見つけることができません。通常、これは、slf4j-api.jarのコピーがアプリケーションサーバーlib/に配置されたときに発生します。Webアプリケーション のWEB-INF/lib/フォルダーではなくフォルダー。

ランタイム環境は何ですか?アプリケーション・サーバー?

于 2012-09-27T17:33:28.213 に答える
0

次のルールに従います。

Place one (and only one) of slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar
于 2012-09-27T17:07:46.613 に答える
0

pom でこれらの依存関係を構成してみてください。

org.slf4j:slf4j-api:jar:1.7.1:compile
org.slf4j:slf4j-log4j12:jar:1.7.1:runtime

slf4j-api はログ API であり、コンパイル時に必要になりますが、slf4j-log4j12 は実装 (log4j を使用) であり、実行時に必要です。

于 2012-09-27T18:12:24.583 に答える