SLF4J: не удалось загрузить класс «org.slf4j.impl.StaticLoggerBinder»

Я пытаюсь создать приложение для подключения к данным для интеграции с procore, и у меня возникли проблемы с установкой необходимых зависимостей. Это мой файл pom.xml:

<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0"
         xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- Replace with the actual groupId, artifactId, and version of your project -->
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <!-- Parent POM for Spring Boot -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.1</version> <!-- Use the appropriate Spring Boot version -->
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <!-- Project properties -->
    <properties>
        <java.version>11</java.version>
    </properties>

    <!-- Dependencies -->
    <dependencies>
        <!-- Spring Boot Starter dependencies -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- Micrometer core -->
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-core</artifactId>
            <version>1.13.1</version> <!-- Adjust version as per availability -->
        </dependency>

        <!-- Lombok for easier Java development -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <!-- Build plugins -->
    <build>
        <plugins>
            <!-- Spring Boot Maven plugin -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>3.3.1</version>
            </plugin>
        </plugins>
    </build>

    <!-- Repositories -->
    <repositories>
        <repository>
            <id>central</id>
            <url>https://repo.maven.apache.org/maven2/</url>
        </repository>
    </repositories>
</project>

Однако в ошибке указано, что конкретная проблема связана с классической зависимостью logback, которая находится прямо здесь:

<dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.5.6</version>
        </dependency>

Ошибка заключается в следующем: SLF4J: не удалось загрузить класс «org.slf4j.impl.StaticLoggerBinder».

Я пробовал использовать разные версии, но все они выдают ошибку: Зависимость «ch.qos.logback:logback-classic:1.2.11» не найдена, а версия 1.2.11 обязательно должна существовать. Заранее благодарим за любую помощь!

Зависимость 'ch.qos.logback:logback-classic:1.2.11' не найдена. Вы используете совсем другую версию... Попробуйте закомментировать dep slf4j непосредственно над ней.

g00se 26.06.2024 21:29

Я не использую 1.2.11, я использую 1.5.6, единственная причина, по которой я попробовал 1.2.11, заключалась в том, чтобы проверить, не вызывает ли версия ошибку, в чем я сомневаюсь, что это было сейчас. Что вы предлагаете мне прокомментировать? Спасибо за помощь!

Pickle 27.06.2024 01:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

TLDR: удалите зависимости slf4j-api и logback-classic из вашего pom. Они будут транзитивно подтянуты Spring в соответствующих версиях. (также обратите внимание, что logback-classic тянет slf4j-api в соответствующей версии)

Причина, по которой ваша текущая настройка не работает, заключается в том, что logback 1.5.6 работает с Slf4j 2.x, который существенно отличается от 1.7.

Смотрите Что изменилось в SLF4J версии 2.0.0?

В частности, slf4j-api теперь использует механизм ServiceLoader для поиска своей серверной части журналирования. SLF4J 1.7.x и более ранние версии использовали механизм статической привязки, который больше не поддерживается slf4j-api версии 2.0.x. Точнее, во время инициализации класс LoggerFactory больше не будет искать класс org.slf4j.impl.StaticLoggerBinder в пути к классам.

Если вы предпочитаете явно указывать зависимость от входа в систему, вы можете использовать:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
</dependency>

Здесь вы не объявляете версию — она управляется в одном из помов Spring с помощью раздела <dependencyManagement> Maven. Если вы хотите быть более откровенным, сделайте то же самое с slf4j-api

Все сработало отлично, спасибо за помощь!

Pickle 27.06.2024 01:51

Они будут транзитивно подтянуты Spring. Это почти... магия;) Я могу только заключить, что Spring знает, что вы используете Logback, благодаря наличию logback.xml, поскольку (обычно) в исходном коде о нем не упоминается. ..? Или он его тянет, если вы им пользуетесь?

g00se 27.06.2024 02:08

Нет, магия, она просто является его собственной зависимостью.

Lesiak 27.06.2024 08:12

Другие вопросы по теме