2015-07-08 2 views
1

Я строю свой проект maven и развертываю на сервере причала, и я получаю эту проблему. В моем $ {jetty_home}/lib у меня есть jcl-over-slf4j-1.7.2.jar, jul-to-slf4j-1.7.2.jar, slf4j-api-1.7.2.jar. Вместе с моим Maven проекта, я имеюНе удалось загрузить класс «org.slf4j.impl.StaticLoggerBinder» после загрузки необходимых зависимостей

<dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>1.7.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.2</version> 
      <scope>provided</scope> 
     </dependency> 

В дереве МВН зависимостей, для SLF4J, я вижу следующее:

[INFO] +- org.slf4j:slf4j-log4j12:jar:1.7.2:compile 
[INFO] | \- log4j:log4j:jar:1.2.17:compile 
[INFO] +- org.slf4j:slf4j-api:jar:1.7.2:provided (scope not updated to compile) 

Помимо этого, у меня есть Обще-каротаж 1.2.jar в комплекте с моим проектом. Теперь я создаю свой проект maven, и если я запустил его, используя мой плагин eclipse jetty, у меня проблем нет, и все отлично работает. После этого, я стараюсь, чтобы развернуть это в удаленном сервере в папке молы WebAPP, и теперь я получаю,

Establishing start.log on Wed Jul 08 12:46:13 PDT 2015 
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. 

Я последовал шаги, упомянутые в других постах относительно этого, но до сих пор не в состоянии исправить это. Пожалуйста помоги. Благодарю.

ответ

2

Вы поместили API SLF в неправильный загрузчик классов.

загрузчика классов иерархия выглядит примерно так (это может быть немного неточно):

BootstrapClassLoader - loads Java classes 
^
    | 
ExtClassLoader - loads some additional libs 
^
    | 
AppClassLoader - loads Jetty and slf4j-api 
^
    | 
WebAppClassLoader - loads your application and can load slf4j-impl 

Ваши классы инициировать загрузку пакетов SLF4J-API и что вызывает делегации из WebAppClassLoader в AppClassLoader. Затем классы slf4j-api будут пытаться загружать классы slf4j-impl, но будут запрашивать только AppClassLoader. Этот загрузчик классов не может делегировать ваш загрузчик класса приложения (это делегировать вниз на диаграмме). Он только делегирует и ничего не находит, отсюда и ошибка.

Вы должны поместить эти библиотеки в один и тот же загрузчик классов. Либо в причале/lib, либо в WAR.

+0

Спасибо Michal за отзыв. Я попытался добавить все 4 баночки, slf4j-api, slf4j-log4j12, jcl-over-slf4j, jul-to-slff4j в мою войну приложений и развернул их в причал. Все еще сталкивается с той же проблемой. Не уверен, что мне не хватает в этой конфигурации. – sriram

+0

Удалили ли вы эти банки из папки libty Jetty? Если slf4j-api все еще существует, вы будете продолжать получать ошибку. Какую версию Jetty вы используете? –

+0

На самом деле я попробовал это сейчас, удалив банки из моей войны с приложением и сохранив ее только в причале, и это сработало :-) Большое спасибо за ваши комментарии и объяснения. – sriram

Смежные вопросы