javadocs для NoSuchMethodError говорят,
Обычно эта ошибка улавливается компилятором; эта ошибка может произойти только во время выполнения, если определение класса несовместимо изменилось.
blockquote>Так что это, вероятно, вызвано несовместимыми версиями загружаемого slf4j. Вместо того, чтобы смотреть на ваш путь к классам и угадывать, где загружаются классы, найдите, где загружен ваш класс, как описано здесь .
Распечатайте, откуда загружаются
org.slf4j.spi.LocationAwareLogger
,org.apache.commons.logging.impl.SLF4JLocationAwareLog
иorg.slf4j.Marker
.
Это обычно происходит, когда у вас есть зависимости, которые используют одну и ту же транзитивную зависимость. Это означает, что 2 из ваших зависимостей (или ваше приложение, и транзитивная зависимость) используют SLF4J внутри с различными версиями. Но ваше приложение может использовать только одну версию класса одновременно, поэтому ему нужно выбрать (не знаете, какие правила здесь ... случайные?)
Чтобы решить проблему, вам обычно нужно сделать mvn dependency:tree
, чтобы увидеть, какие из них используют разные версии SLF4J.
Добавление этой зависимости решило проблему для меня
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
Решено !!!
У меня была зависимость от другого проекта, который использовал плагин JavaDoc
. Плагин JavaDoc
внутри использует Maven-core
, а Maven-core-2.2.1
использует jcl-over-slf4j: 1.5.6
. Maven-core
является банком родительского уровня.
Теперь из-за этого JCL
jar я столкнулся с этой проблемой. Поэтому я удалил его из папки lib
в weblogic
(или любого другого сервера, который вы могли бы использовать).
И ALAS !! Проблема была решена.
Примечание 1: - Вы также можете использовать тэг Maven <exclusion>
, чтобы удалить эту зависимость из JavaDoc
(или любого другого плагина), чтобы решить эту проблему.
Примечание 2: - Используйте вкладку Dependency Hierarchy
в POM, чтобы увидеть, имеются ли такие старые SLF4J
банки. И удалите остальные и сохраните только одну версию.
Надеюсь, что это поможет.
Мы столкнулись с аналогичной проблемой, и оказалось, что у нас есть 2 несовместимые версии баков slf4j в пути к классам. Путь к классу имел следующие две несовместимые версии. После удаления нижних версий из пути к классам проблема была исправлена.
slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar
slf4j-api- 1.5.11.jar slf4j-log4j12-1.5.11.jar
В моем файле pom был кварцевый планировщик, который включал slf4j, поэтому я исключил его:
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
и работал!
Одно решение.
Проверить в каталоге eclipse: configuration \ org.eclipse.equinox.simpleconfigurator \ bundles.info
slf4j не более одного
do
mvn clean dependency: tree -DskipTests;
удалить все зависимости «org.slf4j», кроме одного (самого высокого), как
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>