maven项目中的Logger依赖项

时间:2013-11-29 11:30:35

标签: java maven java-ee build dependencies

在我的项目中,我正在使用:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.2</version>
    </dependency>

我无法删除它,因为很多其他依赖项都使用它。 应用程序正在使用LDAP,所以我最近添加了:

    <dependency>
        <groupId>org.apache.directory.server</groupId>
        <artifactId>apacheds-all</artifactId>
        <version>1.5.5</version>
    </dependency>

这取决于:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.5.2</version>
    </dependency>

现在我有很多错误:

java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
at org.apache.commons.logging.impl.SLF4JLocationAwareLog.error(SLF4JLocationAwareLog.java:225)
你能帮帮我吗?  Yep, I see this question

2 个答案:

答案 0 :(得分:3)

你可以:

  • 将您的版本更新为1.5.7,这是最新的1.x版本。这取决于slf4j-log4j12:1.5.10,所以这不太可能会有所帮助。
  • 考虑使用apacheds-all:2.0.0-M15。这取决于slf4j-log4j12:1.7.5所以如果这个版本适合你,它应该解决这个问题。

<强>更新

其他一些想法:

  • 从Spring解密ApacheDS
  • 或禁用使用旧1.5.x网桥的有问题的软件包的日志记录
  • 或删除此桥(通过排除依赖关系)和(可选)添加log4j配置以查看log4j日志(从未尝试过同时使用它们!)。

答案 1 :(得分:1)

Maven 选择最新版本,但您可以尝试添加依赖关系管理部分,以明确指定您想要的slf4j版本。可能会从所有各种依赖项中选择最新版本(在这种情况下为1.7.2)。

或者,我在将应用程序部署到jboss时遇到了这个问题,因为它捆绑了旧版本的slf4j,它优先于我的应用程序中的版本。您可以通过使用-verbose:class jvm参数运行应用程序(或jboss或其他)来检查这一点,它将注销每个类的加载位置。这将告诉您它是从应用程序中的jar加载,还是在您的环境中加载。