我正在研究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:run
或mvn clean install tomcat7:run
。当我从命令行调用Maven时,我 not 看到slf4j错误,所以这可能与m2e
或Eclipse设置有关。
答案 0 :(得分:7)
错误消息与您的项目无关。这是一个m2e问题,不会造成任何伤害。如果在Eclipse之外的命令行上构建,则不会看到它。
有一个关于此的错误,但不幸的是他们非常愿意混淆peole而不是修复它:
答案 1 :(得分:1)
mvn dependency:tree
的输出清楚地表明slf4j-api和slf4j-simple都在你的类路径上。 SLF4J抱怨找不到org.slf4j.impl.StaticLoggerBinder
这一事实意味着你的类路径上的某个地方还有另一个 slf4j-api.jar 的副本,这是被加载到内存中的副本(而不是副本) com.nike.dpt中的 slf4j-api.jar :dpt:war )。在这种情况下,由于许多应用程序服务器的类加载器委托模型,服务器的slf4j-api副本加载的类无法找到打包在 slf4j-simple.jar 中的类。在您的网络应用程序中。通常,当slf4j-api.jar的副本放在应用程序服务器的 lib / 文件夹中而不是 WEB-INF时,会发生这种情况。您的Web应用程序的/ lib / 文件夹。
您的运行时环境是什么?应用服务器?
答案 2 :(得分:0)
遵循此规则:
Place one (and only one) of slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar or logback-classic.jar
答案 3 :(得分: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),并且在运行时需要它。