Я пытаюсь создать приложение для подключения к данным для интеграции с 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 обязательно должна существовать. Заранее благодарим за любую помощь!
Я не использую 1.2.11, я использую 1.5.6, единственная причина, по которой я попробовал 1.2.11, заключалась в том, чтобы проверить, не вызывает ли версия ошибку, в чем я сомневаюсь, что это было сейчас. Что вы предлагаете мне прокомментировать? Спасибо за помощь!
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
Все сработало отлично, спасибо за помощь!
Они будут транзитивно подтянуты Spring. Это почти... магия;) Я могу только заключить, что Spring знает, что вы используете Logback, благодаря наличию logback.xml, поскольку (обычно) в исходном коде о нем не упоминается. ..? Или он его тянет, если вы им пользуетесь?
Нет, магия, она просто является его собственной зависимостью.
Зависимость 'ch.qos.logback:logback-classic:1.2.11' не найдена. Вы используете совсем другую версию... Попробуйте закомментировать dep slf4j непосредственно над ней.