Путь к классу содержит несколько привязок SLF4J, исключение не работает, - PullRequest
0 голосов
/ 15 ноября 2018

Я получаю следующую ошибку:

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 и подобные вопросы. Я нашел с помощью mvn dependency: 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 голосов
/ 18 марта 2019

Я думаю, что это ошибка / функция в Maven. Предположим, у вас есть это дерево зависимостей:

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

и вы исключаете D на B, он все равно будет там, потому что C также втягивает его. С точки зрения Maven это имеет смысл, поскольку он не пытается понять, существует ли связь между B и C. Мы знаем, что они все из весны, но Мэйвен не может быть так уверен.

Решение: Вам нужно продублировать исключение на C в вашем POM.

Используйте mvn dependency:tree, чтобы найти все места, где используется D, и добавьте одно исключение каждое.

И убедитесь, что вы действительно исключаете D. В приведенном выше примере вы исключаете org.slf4j:slf4j-log4j12 вместо org.slf4j:slf4j-jdk14

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...