繁体   English   中英

Java、Maven:构建期间出现 SLF4J 错误

[英]Java, Maven: SLF4J error during build

我正在开发一个 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)需要log4j版本 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:runmvn clean install tomcat7:run 当我从命令行调用Maven的我没有看到SLF4J错误,所以也许这同做m2e或Eclipse设置。

该错误消息与您的项目无关。 这是一个 m2e 问题,不会造成任何伤害。 如果您在 Eclipse 之外的命令行上构建,您将看不到它。

有一个关于此的错误,但不幸的是,他们更愿意混淆人们而不是修复它:

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

mvn dependency:tree的输出清楚地表明 slf4j-api 和 slf4j-simple 都在您的类路径上。 SLF4J 抱怨找不到org.slf4j.impl.StaticLoggerBinder意味着在您的类路径上的某处还有slf4j-api.jar 的另一个副本,这是正在加载到内存中的副本(而不是slf4j-api.jar的副本 com.nike.dpt:dpt:war 中的jar )。 在这种情况下,由于很多应用服务器的类加载器委托模型,服务器的slf4j-api副本加载的类在你的web-app中找不到slf4j-simple.jar中打包的类。 通常,当 slf4j-api.jar 的副本放置在应用程序服务器lib/文件夹而不是 Web 应用程序的WEB-INF/lib/文件夹时,就会发生这种情况。

你的运行时环境是什么? 应用服务器?

遵循这个规则:

Place one (and only one) of slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar

尝试在你的 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),在运行时需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM