Проблема с slf4j API [дубликат]

27
задан Peter Becker 24 November 2011 в 08:13
поделиться

7 ответов

javadocs для NoSuchMethodError говорят,

Обычно эта ошибка улавливается компилятором; эта ошибка может произойти только во время выполнения, если определение класса несовместимо изменилось.

Так что это, вероятно, вызвано несовместимыми версиями загружаемого slf4j. Вместо того, чтобы смотреть на ваш путь к классам и угадывать, где загружаются классы, найдите, где загружен ваш класс, как описано здесь .

Распечатайте, откуда загружаются org.slf4j.spi.LocationAwareLogger, org.apache.commons.logging.impl.SLF4JLocationAwareLog и org.slf4j.Marker.

23
ответ дан Community 25 August 2018 в 08:20
поделиться

Это обычно происходит, когда у вас есть зависимости, которые используют одну и ту же транзитивную зависимость. Это означает, что 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>
0
ответ дан Akhil Jain 25 August 2018 в 08:20
поделиться

Решено !!!

У меня была зависимость от другого проекта, который использовал плагин 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 банки. И удалите остальные и сохраните только одну версию.

Надеюсь, что это поможет.

0
ответ дан AnirbanDebnath 25 August 2018 в 08:20
поделиться

Мы столкнулись с аналогичной проблемой, и оказалось, что у нас есть 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

1
ответ дан Hari 25 August 2018 в 08:20
поделиться

В моем файле pom был кварцевый планировщик, который включал slf4j, поэтому я исключил его:

<exclusion>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
</exclusion>

и работал!

0
ответ дан russellhoff 25 August 2018 в 08:20
поделиться

Одно решение.

Проверить в каталоге eclipse: configuration \ org.eclipse.equinox.simpleconfigurator \ bundles.info

slf4j не более одного

1
ответ дан user2093980 25 August 2018 в 08:20
поделиться

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>
1
ответ дан Victor 25 August 2018 в 08:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: