Ответ 1
Решено, добавив следующее исключение в зависимостях (pom.xml), которые вызвали конфликт.
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
Я получаю следующую ошибку. Кажется, существует несколько фреймворков регистрации, связанных с sl4j. Не знаете, как это решить. Любая помощь приветствуется.
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/org/slf4j/slf4j-log4j12/1.6.4/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
Решено, добавив следующее исключение в зависимостях (pom.xml), которые вызвали конфликт.
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
Gradle версия;
configurations.all {
exclude module: 'slf4j-log4j12'
}
Ошибка, вероятно, дает больше информации, как это (хотя ваши имена банок могут отличаться)
SLF4J: найдено связывание в [Баночка: файл /D: /Java/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: найдено связывание в [Баночка: файл /D: /Java/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.8.2/log4j-slf4j-impl-2.8.2.jar/орг /SLF4J/осущ/StaticLoggerBinder.class]
Заметил, что конфликт происходит из двух банок, названных logback-classic-1.2.3
и log4j-slf4j-impl-2.8.2.jar
.
Запустите mvn dependency:tree
в родительской папке pom.xml этого проекта, получив:
Теперь выберите тот, который вы хотите игнорировать (может потребоваться деликатное усилие, мне нужно больше помощи в этом)
Я решил не использовать тот, который импортирован из spring-boot-starter-data-jpa
(верхняя зависимость) через spring-boot-starter
и через spring-boot-starter-logging
, pom становится:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
в вышеупомянутом пом spring-boot-starter-data-jpa
будет использовать spring-boot-starter
, настроенный в том же файле, за исключением logging
(он содержит logback
)
Версия Sbt:
Добавить exclude("org.slf4j", "slf4j-log4j12")
в зависимость, которая транзитивно включает slf4j-log4j12
. Например, при использовании Spark с Log4j 2.6:
libraryDependencies ++= Seq(
// One SLF4J implementation (log4j-slf4j-impl) is here:
"org.apache.logging.log4j" % "log4j-api" % "2.6.1",
"org.apache.logging.log4j" % "log4j-core" % "2.6.1",
"org.apache.logging.log4j" % "log4j-slf4j-impl" % "2.6.1",
// The other implementation (slf4j-log4j12) would be transitively
// included by Spark. Prevent that with exclude().
"org.apache.spark" %% "spark-core" % "1.5.1" exclude("org.slf4j", "slf4j-log4j12")
)
<!--<dependency>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-log4j2</artifactId>-->
<!--</dependency>-->
Я решил удалить это: spring-boot-starter-log4j2
Я просто проигнорировал/удалил этот файл jar.
Просто используйте только требуемую зависимость, не все:))). Для меня, для нормальной работы процесса регистрации вам нужна эта зависимость, исключая других из pom.xml
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.8</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.8</version>
</dependency>
... org.codehaus.mojo cobertura-maven-plugin 2.7 test ch.qos.logback logback-классические инструменты com.sun...
## Я исправил это
... org.codehaus.mojo cobertura-maven-plugin 2.7 test ch.qos.logback logback-классические инструменты com.sun...
Для меня это оказалось проблемой Eclipse/Maven после переключения с log4j на logback. Загляните в ваш файл .classpath
и найдите строку "log4j"
.
В моем случае у меня было следующее: <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.7.1/slf4j-log4j12-1.7.1.jar"/> <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.17/log4j-1.2.17.jar"/>
Удаление этих записей из файла (или вы можете восстановить его) исправило проблему.
Для меня ответом было заставить Maven восстановить. В Затмении:
Это проблема, потому что класс StaticLoggerBinder.class принадлежит двум разным jar файлам. ссылки на этот класс из logback-classic-1.2.3.jar и того же класса также ссылаются на log4j-slf4j-impl-2.10.0.jar. обе банки в classpath. Следовательно, между ними существует конфликт. Это причина того, что файл журнала не генерируется, даже если файл log4j2.xml находится в classpath [src/main/resource].
Мы выбрали один из jar, я рекомендую использовать файл log4j-slf4j-impl-2.10.0.jar и исключить файл logback-classic-1.2.3.jar. Решение: откройте файл pom и просмотрите иерархию зависимостей [eclipse] или выполните
mvn dependency: команда дерева для определения дерева зависимостей и источника зависимости, которая загружает зависимость. найти конфликтующие зависимости и исключить их. Для приложения Springboot попробуйте это.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
This is working fine for me after struggling a lots.
Комбинация <scope>provided</scope>
и <exclusions>
не сработала для меня.
Я должен был использовать это:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<scope>system</scope>
<systemPath>${project.basedir}/empty.jar</systemPath>
</dependency>
Где empty.jar
- это файл jar, в котором буквально ничего нет.
Этот вопрос занял у меня целый день. Наконец я решил использовать не очень хороший трюк. Просто поставьте одну из приведенных ниже зависимостей maven в самом начале вашего файла pom.xml. Используйте любой файл file.slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar или logback-classic.jar, он должен выполнить эту работу. Обратите внимание: используйте последние банки из maven. Здесь ссылка!. Это хорошо читать. Чтобы понять, что вам нужно удалить баны slf4j, созданные в локальном репозитории (в моей папке с именем ".m2" ) и запустить ваш проект как Maven clean и установить Maven и посмотреть все загружаемые maven-банки. И вы поймете, как JVM выбирает последнюю (банку) для нашей программы. Чтобы понять далее, пожалуйста, удалите зависимость POM из файла pom.xml и снова перейдите в локальный репозиторий и удалите все банеры SLF4J и запустите проект, как Maven clean и maven install, и заставит вас следить за загрузками, которые происходит через maven, а затем запускает ваше приложение, чтобы увидеть аффект. Вы можете заметить, что ошибка или исключение не будут влиять на размещение или упоминание зависимости в начале, поскольку это связано с тем, что JVM рассматривает первый барабан в нашем проекте. Но это нехороший ход. Я бы сказал, использование исключения в api или баночках, где вы обнаружите, что конкретный api загружает банку slf4j. Что-то я заметил, несколько банок (например: аннотации спящего режима и т.д.) Загружают slf4j, когда мы создаем проект maven. И именно по этой причине в наш проект вводят несколько контейнеров slf4j. Надеюсь, это поможет. Это только мой опыт.
Кажется, удаляет каталог .m2 и:
mvn install -DskipTests -T 4
разрешил эту проблему для меня.