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

这听起来像是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的形式提供它。

以上是 解决Maven项目中的多个SLF4J绑定 的全部内容, 来源链接: utcz.com/qa/418810.html

回到顶部