NoSuchMethodError с API SLF4J
При использовании с slf4j,
String test = blahblahblah;
logger.info("{}",test);
След, как показано ниже
java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.format(Ljava/lang/String;Ljava/lang/Object;)Lorg/slf4j/helpers/FormattingTuple;
at org.slf4j.impl.JDK14LoggerAdapter.info(JDK14LoggerAdapter.java:304)
Ответы
Ответ 1
Похоже, у вас есть неправильная совпадение версий между различными API-интерфейсами SLF4J и интеграционными библиотеками. SLF4J чрезвычайно дергается, когда дело доходит до совместимости версий (например, 1.6.x не обратно совместим с 1.5.x).
Убедитесь, что разные версии JAR совпадают, и убедитесь, что дубликатов JAR нет в пути к классам.
Ответ 2
Я получал эту ошибку:
SLF4J: The requested version 1.6 by your slf4j binding is not compatible with [1.5.5, 1.5.6]
SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.format(Ljava/lang/String;Ljava/lang/Object;)Lorg/slf4j/helpers/FormattingTuple;
.
.
.
Теперь я просто прокомментировал строку с версией pom.xml, как показано ниже, и теперь она работает:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<!-- <version>1.6.5</version> -->
</dependency>
Ответ 3
Также убедитесь, что вы удаляете в Glassfish извне (не локально), чтобы удалить дубликаты зависимостей в папке lib установки Glassfish на этом сервере.
В моем случае все работало нормально локально, но после его развертывания на сервере я получил эту ошибку.
Ответ 4
Похоже, у вас есть другая версия класса MessageFormatter, чем класс JDK14LoggerAdapter. Контролируйте свой путь к классу.
Ответ 5
Я ожидаю, что это из-за несовместимой версии (например, если вы используете приложение 6.0 и держите файл jar (slf4j 1.5) или удерживаете оба (slf4j 1.5 и 1.6)), тогда исключение может быть вызвано.
Предложение
пойдите для правильной версии
не помещайте более одного файла версии (slf4f 1.5 и slf4j 1.6) в путь сборки, удаляйте соответствующий
и
тогда убедитесь, что вы его получите.