首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >slf4j-api冲突

slf4j-api冲突
EN

Stack Overflow用户
提问于 2013-02-24 12:47:53
回答 3查看 2.2K关注 0票数 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.

我使用arquillian和managed JBoss AS 7.1进行测试(Maven从maven central下载版本并运行测试)。我也在使用arquillian persistence api。

我应该做什么来纠正给定的警告?我的意思是,我应该保留哪一个依赖项,或者我应该如何允许两者都正常工作?

我想这就是为什么我没有收到任何关于arquillian持久性api失败的错误消息的原因(因为记录器不工作?)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-24 15:56:19

您看到的消息是警告,而不是错误。这意味着SLF4J正在为您选择绑定,因为您自己没有选择绑定。默认绑定只是丢弃所有日志消息,这并不是很有用。

如果您在Maven中有冲突的版本,通常强制使用较新的版本会更安全。库通常是向后兼容的。

因此,请坚持使用较新版本的slf4j-api,并确保将绑定声明为依赖项,例如slf4j-jdk14。如果要生成库,请确保仅使用test作用域声明绑定。

票数 2
EN

Stack Overflow用户

发布于 2013-03-02 01:52:34

首先。关于依赖关系。

为了添加SLF4J,您必须将这些依赖项中的一个且仅一个放入您的pom.xml中。这取决于您选择使用的实现。您在pom.xml中添加的每个依赖项都会自动添加到类路径中。如果下面的一个依赖项是由另一个依赖项提供的,那么您可以省略它。不要忘记,即使依赖项是由另一个依赖项提供的,也必须只包含一个依赖项。

代码语言:javascript
复制
<dependency>
   <groupId>ch.qos.logback</groupId>
   <artifactId>logback-classic</artifactId>
   <version></version>
</dependency>
代码语言:javascript
复制
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-simple</artifactId>
   <version></version>
   <scope>compile</scope>
</dependency>
代码语言:javascript
复制
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>log4j-over-slf4j</artifactId>
   <version></version>
   <scope>compile</scope>
</dependency>
代码语言:javascript
复制
<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

票数 2
EN

Stack Overflow用户

发布于 2013-02-26 18:59:46

JBoss 7.1内置了对SLF4J的支持。假设这是一个带有WAR打包的web应用程序,您可以添加src/main/webapp/WEB-INF/jboss-deployment-structure.xml

代码语言:javascript
复制
<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依赖的范围。

代码语言:javascript
复制
<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文件并检查“依赖层次结构”选项卡,它将为您提供类似的信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15048773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档