SLF4J: Не удалось загрузить класс "org.slf4j.impl.StaticLoggerBinder" в Maven-проекте
Описание проблемы
У меня есть зависимость от SLF4J, и я получаю следующую ошибку:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Вот мой Maven-запись:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
Где может быть проблема?
EDIT: Без зависимости от log4j я получаю следующую исключение:
Failed to instantiate SLF4J LoggerFactory
Reported exception:
java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:121)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111)
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:241)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254)
at org.apache.bval.jsr303.ConfigurationImpl.<clinit>(ConfigurationImpl.java:50)
...
EDIT2: Вот пример дерева зависимостей Maven, который я получаю:
[INFO] com.myCompany.abc:ABC_Document:ejb:0.0.1-SNAPSHOT
[INFO] +- com.myCompany.abc:ABC_Basic:jar:0.0.1-SNAPSHOT:compile
[INFO] +- com.myCompany.iap:javax.j2ee:jar:5.0.0:provided
[INFO] +- com.myCompany.iap:logging:jar:5.0.0:provided
[INFO] +- com.myCompany.iap:util:jar:5.0.0:provided
[INFO] +- junit:junit:jar:4.8.2:test
[INFO] +- javax.servlet:jstl:jar:1.2:provided
[INFO] +- org.slf4j:slf4j-api:jar:1.6.6:compile
[INFO] +- org.slf4j:slf4j-simple:jar:1.6.6:compile
[INFO] \- org.mockito:mockito-all:jar:1.9.0:test
Помогите, пожалуйста, разобраться с этой проблемой!
2 ответ(ов)
Я столкнулся с этой проблемой в IntelliJ и решил её, добавив в свой pom.xml
следующие зависимости:
<!-- Зависимости для логирования -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
<exclusions>
<exclusion>
<!-- Определен ниже -->
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
Убедитесь, что вы корректно указали версии для logback.version
и slf4j.version
в вашем pom.xml
. Это должно решить проблемы с зависимостями логирования в вашем проекте.
Сообщение, которое вы упоминаете, достаточно ясно:
SLF4J: Не удалось загрузить класс "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Используется реализация логгера с нулевым действием (NOP).
SLF4J: Дополнительные сведения смотрите по адресу http://www.slf4j.org/codes.html#StaticLoggerBinder.
API SLF4J не смогло найти реализацию, и решило использовать реализацию NOP по умолчанию. В вашем случае файл slf4j-log4j12.jar каким-то образом оказался недоступен, когда класс LoggerFactory был загружен в память, что действительно очень странно. Что вы видите в результате выполнения команды "mvn dependency:tree"?
Различные объявления зависимостей могут даже не быть непосредственной причиной проблемы. У меня сильные подозрения, что версия slf4j-api.jar
ниже 1.6 была развернута без вашего ведома.
Как добавить локальные JAR-файлы в Maven-проект?
SLF4J: Не удалось загрузить класс "org.slf4j.impl.StaticLoggerBinder"
Как указать Maven использовать последнюю версию зависимости?
IntelliJ сообщает "Невозможно разрешить символ", но код все равно компилируется
Необходимый компилятор в данной среде отсутствует. Возможно, вы используете JRE вместо JDK?