当前位置: 首页 > 面试题库 >

解决Maven项目中的多个SLF4J绑定

东方骏
2023-03-14
问题内容

这听起来像是SE网站上的一堆类似的问题,所以我应该很冗长以阐明我的问题。因此,这是项目的最小内容pom.xml

<dependencies>
     <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.0.6</version>
    </dependency>

   <dependency>
        <groupId>org.codehaus.gmaven.runtime</groupId>
        <artifactId>gmaven-runtime-1.7</artifactId>
        <version>1.3</version>
   </dependency>

</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <configuration>
                <mainClass>org.shabunc.App</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

这是Maven生成的依赖树。

mvn dependency:tree -Dverbose -Dincludes=org.slf4j

[INFO] [dependency:tree {execution: default-cli}]
[INFO] org.shabunc:logdebug:jar:1.0-SNAPSHOT
[INFO] \- ch.qos.logback:logback-classic:jar:1.0.6:compile
[INFO]    \- org.slf4j:slf4j-api:jar:1.6.5:compile

现在,让我们删除排除并再次检查依赖项。我们会得到:

 [INFO] org.shabunc:logdebug:jar:1.0-SNAPSHOT
[INFO] +- ch.qos.logback:logback-classic:jar:1.0.6:compile
[INFO] |  \- org.slf4j:slf4j-api:jar:1.6.5:compile
[INFO] \- org.codehaus.gmaven.runtime:gmaven-runtime-1.7:jar:1.3:compile
[INFO]    +- (org.slf4j:slf4j-api:jar:1.5.10:compile - omitted for conflict with 1.6.5)
[INFO]    +- org.codehaus.gmaven.feature:gmaven-feature-support:jar:1.3:compile
[INFO]    |  \- (org.slf4j:slf4j-api:jar:1.5.10:compile - omitted for conflict with 1.6.5)
[INFO]    \- org.codehaus.gmaven.runtime:gmaven-runtime-support:jar:1.3:compile
[INFO]       +- (org.slf4j:slf4j-api:jar:1.5.10:compile - omitted for conflict with 1.6.5)
[INFO]       \- org.sonatype.gshell:gshell-io:jar:2.0:compile
[INFO]          \- org.sonatype.gossip:gossip:jar:1.0:compile
[INFO]             \- (org.slf4j:slf4j-api:jar:1.5.8:compile - omitted for conflict with 1.6.5)

因此,正如我们所看到的,一切都按预期工作,并且实际上排除了冲突的依赖关系。但事实是,即使排除 依赖项,在编译和调用时我仍然收到以下消息mvn exec:java

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/shabunc/.m2/repository/ch/qos/logback/logback-classic/1.0.6/logback-classic-1.0.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/shabunc/.m2/repository/org/sonatype/gossip/gossip/1.0/gossip-1.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]

问题是:为什么我仍然看到此警告?为使执行过程中只有一个版本的slf4j可以访问,应该怎么做?


问题答案:

您的问题不是得到两个SLF4J API副本,而是得到两个不同的SLF4J实现。您需要排除八卦,而不要排除API。这意味着:

<dependency>
    <groupId>org.codehaus.gmaven.runtime</groupId>
    <artifactId>gmaven-runtime-1.7</artifactId>
    <version>1.3</version>
    <exclusions>
      <exclusion>
        <groupId>org.sonatype.gossip</groupId>
        <artifactId>gossip</artifactId>
      </exclusion>
    </exclusions>
</dependency>

闲话依赖由声明gshell-io;希望它实际上不需要八卦,而只需要一个SLF4J SLF4J,您将以Logback的形式提供它。



 类似资料:
  • 这个问题听起来像是SE网站上的一堆类似问题,所以我应该非常详细地说明我的问题。所以,这是项目的最小: 这是maven生成的依赖树。 : 现在,让我们删除排除并再次检查依赖项。我们将得到: 因此,正如我们所看到的,一切都按预期工作,并且实际上排除了冲突的依赖关系。但问题是,即使排除了依赖关系,我仍然在编译和调用时收到以下消息: 问题是:为什么我仍然看到这个警告,以及在执行过程中应该做些什么才能使sl

  • 我在运行java代码时遇到以下运行时异常。有人能帮我解决绑定冲突吗。

  • 我已经在我的应用程序中使用-SLF4J创建了cutom日志,如下链接:, http://javaeenotes.blogspot.com/2011/12/custom-slf4j-logger-adapter.html 它的工作与样本HelloWorldProgram这样很好, 但是如果我将它集成到maven项目中,使用spring创建日志文件, 我得到以下错误。尝试了许多不同的方法来解决这个问题

  • 在将apache.mahout添加到pom.xml之后,我在运行spring项目时开始出现这个警告,我想知道如何抑制这个警告。 这是我的pom.xml 我试图排除slf4j-log4j12,但仍然不能工作,每次都有警告 我找遍了所有的地方,但我无法移除警告。 有什么建议吗?

  • 我正在 Websphere v8.5.5.0 上运行一个应用程序,并尝试使用日志作为我的日志记录框架。 当我尝试启动应用程序时,我收到了一个类似于此的错误: 正如答案所解释的,ibm库已经在类路径上包含了logback classic库的实现。我想了解最新的logback,所以想知道是否有人能告诉我如何手动选择要使用的绑定(不使用父类加载程序!)。

  • 我在尝试安装MAVEN时遇到了这个错误。我尝试了排除,但不确定在pom文件中包含的位置。让我在我的pom文件中应该包括怎样和什么排除标记。我还附加了我的pom文件片段,其中包括排除'SLF4J:Class path包含多个SLF4J绑定。 SLF4J:在[jar:file:/c:/users/147188/.m2/repository/ch/qos/logback/logback-classic/