Отладка Bizarre Spring / SLF4J / Jar Issue - PullRequest
1 голос
/ 03 декабря 2011

Я использую Spring (3.0.5.RELEASE) для создания и управления некоторыми bean-компонентами и получаю очень странные ошибки времени выполнения.

При первом запуске кода я использовал slf4j-api-1.5.11, и я получил сообщение об ошибке, показанное ниже. Я быстро просмотрел онлайн, и похоже, что метод MessageFormatter.format(String,Object,Object) не был добавлен в SLF4J до версии 1.6. Поэтому для меня было очевидно, что где-то в моем графике зависимостей у меня был какой-то компонент (Spring, Camel или дюжина других возможностей) в зависимости от версии SLF4J 1.6+.

Я удалил 1.5.11 из своего пути сборки, заменил его на 1.6.2 и пересобрал. Все еще получаю ту же ошибку. Я проверил файл класса в 1.6.2 Jar, и он определенно содержит этот метод. Я проверил настройки пути к классам, настройки Ivy (которые я использую для управления зависимостями) и даже попытался очистить проект (Eclipse) и запустить его из чистого состояния.

Я начинал думать, что это может быть «вещь Затмения». Но я упаковываю это в WAR и развертываю в Tomcat; Затмение не имеет к этому никакого отношения.

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'messagehandler' defined in ServletContext resource [/WEB-INF/spring-config.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.tms.relay.web.RelayWebIngestMessageHandler]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.format(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Lorg/slf4j/helpers/FormattingTuple

Есть идеи? Онлайн поиск не дал никаких рекомендаций, кроме очевидных (обновите Jar). Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 05 декабря 2011

Пробежал по плющу в подробном режиме.Оказалось, что в моем графе зависимостей был компонент, который заставлял Айви выселять последнюю версию SLF4J (1.6.2) и заставил его использовать более старую версию (1.5.11).история для новичков Айви: если что-то не работает как надо, запустите Айви в подробном (-v) режиме.

0 голосов
/ 04 декабря 2011

Я бы попробовал следующее:

(1) Распакуйте WAR и убедитесь, что его содержимое соответствует вашим ожиданиям. В частности, проверьте файл JAR SLF4J.

(2) После того, как вы проверили WAR, удалите каталог, в котором Tomcat разрывает файл WAR, и перезапустите Tomcat. Это должно заставить Tomcat заново развернуть приложение. Это вряд ли поможет, но я бы исключил это рано.

(3) Проверьте наличие старой версии JAR в специальных каталогах Tomcat - $ CATALINA_HOME / lib, shared / lib и / или shared / classes. Более подробную информацию о classpath Tomcat можно найти здесь . В частности, информацию о Tomcat 7 можно найти здесь и там .

Может быть полезно знать, на какой ОС вы работаете. Кроме того, как был установлен Tomcat и что вы настроили с тех пор (например, сценарий запуска)?

...