Множественные привязки SLF4J вызывают ошибку?
У меня проблема с моим деревом зависимостей и множественным связыванием SLF4J. То, что я выяснил до сих пор, заключается в том, что обычно это вызывает только предупреждение, но в моем случае, похоже, это предотвращает запуск моей программы:
Вот те исключения, которые я получаю:
SLF4J: путь класса содержит несколько привязок SLF4J. SLF4J: найденное связывание в [jar: файл:/C:/Users/FischerNi/.m2/repository/org/slf4j/slf4j-jdk14/1.5.3/slf4j-jdk14-1.5.3.jar!/Org/slf4j/осущ/StaticLoggerBinder.class] SLF4J: найдено привязку в [jar: файл:/C:/Users/FischerNi/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/Org/slf4j/осущ/StaticLoggerBinder.class] SLF4J: см. http://www.slf4j.org/codes.html#multiple_bindings для объяснения. SLF4J: slf4j-api 1.6.x(или более поздняя версия) несовместима с этим связыванием. SLF4J: Ваша привязка - версия 1.5.5 или более ранняя. SLF4J: обновите свою привязку до версии 1.6.x. или 2.0.x Исключение в потоке "main" java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton() Lorg/slf4j/impl/StaticLoggerBinder;
и это - соответствующая часть моих зависимостей: net.lightbody.bmp browsermob-прокси 2,0-бета-8
<!-- LOGGING DEPENDENCIES - LOG4J -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
Может кто-нибудь, пожалуйста, скажите мне, как решить эту проблему?
Ответы
Ответ 1
Есть несколько решений:
- Убедитесь, что содержит только один slf4j jar (возможно, с более высокой версией), если у вас есть пара из них с разными версиями на пути к вашему классу.
- Иногда бывает невозможно исключить несколько банок slf4j, поскольку они могут использоваться другими банками внутри, которые находятся на вашем пути к классу. Эти зависимые баночки могут относиться к разным версиям банок slf4j, что приводит к сбою вашего приложения. В таких случаях убедитесь, что у вас есть банка с более высокой версией SLF4j, добавленной перед другой банкой с использованием банок SLF4J. Это гарантирует, что ваша java-программа подберет последнюю версию SLF4J, которая, очевидно, имеет обратную совместимость.
Ответ 2
Если ваш проект имеет зависимость от другого проекта, а другой использует slf4j, а также с другой версией, попробуйте использовать excusion
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
Ответ 3
Я бы предложил использовать следующую зависимость в maven,
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
Это решило мою проблему, хотя у меня больше зависимостей с помощью slf4j.
Ответ 4
Это происходит, когда имеется более одной банки. Чтобы проверить, имеется ли уже jar или нет, перейдите в проект → java resources → maven dependencies и проверьте, существует ли там банка или нет. Если это доступно, и вы все равно получите ошибку. Затем найдите местоположение этого файла jar в папке .m2\resources и удалите полную папку, связанную с этим файлом jar, затем загрузите новую версию и импортируйте ее в свой проект.:)
Когда-нибудь я получаю ошибки, даже если я загрузил правый файл jar с правильной версией в моем файле pom.xml. Затем мне нужно удалить его из моего pom.xml и загрузить эту банку из google и импортировать ее в мой проект. Убедитесь, что если вы это сделаете, не забудьте перейти к свойствам проекта → вкладка Assembly Installation → Click Add → Java Build Path Entries и нажмите на этот файл jar и нажмите Apply.
Ответ 5
Когда в пути к классу доступны несколько привязок, выберите одно и только одно связывание, которое вы хотите использовать, и удалите другие привязки.
Попробуйте удалить явно добавленную зависимость 'org.slf4j' или 'log4j2'.
Ответ 6
Ответ от Fateh правильный, мне пришлось потратить некоторое время, чтобы понять, как его использовать, поэтому я добавляю законченное решение:
-
Запустите mvn dependency:tree
-
выясните, какая библиотека использует slf4j:
[INFO] +- net.lightbody.bmp:browsermob-proxy:jar:2.0-beta-8:compile
[INFO] | +- org.slf4j:slf4j-jdk14:jar:1.7.25:compile
-
исключить его из Maven, как это:
<dependency>
<groupId>net.lightbody.bmp</groupId>
<artifactId>browsermob-proxy</artifactId>
<version>2.0.0</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
</exclusion>
</exclusions>
</dependency>