我使用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.
我使用arquillian和managed JBoss AS 7.1进行测试(Maven从maven central下载版本并运行测试)。我也在使用arquillian persistence api。
我应该做什么来纠正给定的警告?我的意思是,我应该保留哪一个依赖项,或者我应该如何允许两者都正常工作?
我想这就是为什么我没有收到任何关于arquillian持久性api失败的错误消息的原因(因为记录器不工作?)。
发布于 2013-02-24 15:56:19
您看到的消息是警告,而不是错误。这意味着SLF4J正在为您选择绑定,因为您自己没有选择绑定。默认绑定只是丢弃所有日志消息,这并不是很有用。
如果您在Maven中有冲突的版本,通常强制使用较新的版本会更安全。库通常是向后兼容的。
因此,请坚持使用较新版本的slf4j-api,并确保将绑定声明为依赖项,例如slf4j-jdk14。如果要生成库,请确保仅使用test作用域声明绑定。
发布于 2013-03-02 01:52:34
首先。关于依赖关系。
为了添加SLF4J,您必须将这些依赖项中的一个且仅一个放入您的pom.xml中。这取决于您选择使用的实现。您在pom.xml中添加的每个依赖项都会自动添加到类路径中。如果下面的一个依赖项是由另一个依赖项提供的,那么您可以省略它。不要忘记,即使依赖项是由另一个依赖项提供的,也必须只包含一个依赖项。
<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项目时遇到的令人讨厌的错误。如果只有上面的一个依赖项,你仍然会得到SLF4J:加载"org.slf4j.impl.StaticLoggerBinder“类失败。那么你就面临着来自m2e的bug。
Eclipse Juno和Indigo在使用捆绑的maven版本(M2e)时,不会抑制消息SLF4J:无法加载类"org.slf4j.impl.StaticLoggerBinder“。此行为存在于m2e版本1.1.0.20120530-0009及更高版本。
尽管这被指示为错误,但您的日志将正常保存。在修复此错误之前,突出显示的错误将一直存在。有关这方面的更多信息,请参阅m2e support site。
当前可用的解决方案是使用外部maven版本,而不是Eclipse的捆绑版本。你可以在下面的问题中找到关于这个解决方案和关于这个bug的更多细节,我认为这些问题描述了你所面临的相同问题。
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". error
发布于 2013-02-26 18:59:46
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.xml以修复SLF4J依赖的范围。
<dependencies>
...
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<scope>provided</scope>
</dependency>
...
</dependencies>根据POM文件的排列方式,您可能还需要提供要使用的SLF4J版本。mvn dependency:tree可以显示哪些SLF4J deps正在被调入。确保他们都得到了“提供的”作用域。如果您使用Eclipse和m2e插件,您还可以打开您的POM文件并检查“依赖层次结构”选项卡,它将为您提供类似的信息。
https://stackoverflow.com/questions/15048773
复制相似问题