类路径包含多个SLF4J绑定,排除不起作用,

时间:2018-11-14 22:01:10

标签: java maven

我收到以下错误:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/Vash/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/Vash/.m2/repository/org/slf4j/slf4j-jdk14/1.7.25/slf4j-jdk14-1.7.25.jar!/org/slf4j /impl/StaticLoggerBinder.class]

我已经检查了https://www.slf4j.org/codes.html#multiple_bindings 和类似的问题。我发现使用mvndependency:tree有4个依赖项使用SLF4J,因此我向它们添加了排除项,如下所示:

<dependency>
<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
            <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </exclusion>
</exclusions>

 这没有任何改变,但我仍然遇到相同的错误。我尝试删除警告中指定的.jar文件,但随后出现有关缺少类的错误。另外我正在使用IntelliJ,所以这里可能是通过某种方式重新加载pom.xml文件吗?

1 个答案:

答案 0 :(得分:0)

我认为这是Maven中的错误/功能。假设您有以下依赖关系树:

A
+---B
    +---C
    |   +---D
    |
    +---D

,并且您排除了D上的B,因为C也将其插入。从Maven的角度来看,这很有意义,因为它没有试图理解BC之间是否存在关系。我们知道它们全都来自Spring,但是Maven不确定。

解决方案:您需要在POM中的C上复制排除项。

使用mvn dependency:tree查找使用D的所有地点,并分别添加一个排除项。

并确保您实际上排除了D。在上面的示例中,您排除了org.slf4j:slf4j-log4j12而不是org.slf4j:slf4j-jdk14