2010-09-17 2 views
39

Я пытаюсь запустить пример примерных фрагментов, приведенный here.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder

Ниже мой pom.xml:

<dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tiles</groupId> 
      <artifactId>tiles-api</artifactId> 
      <version>2.1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tiles</groupId> 
      <artifactId>tiles-core</artifactId> 
      <version>2.1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.tiles</groupId> 
      <artifactId>tiles-jsp</artifactId> 
      <version>2.1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.5.2</version> 
     </dependency> 

Когда я пытаюсь запустить пример летящего ниже ошибки:

Sep 17, 2010 11:59:43 PM org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Error configuring application listener of class  org.apache.tiles.web.startup.TilesListener 
java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder 
at org.slf4j.LoggerFactory.<clinit>(LoggerFactory.java:60) 
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155) 
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:131) 
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685) 
at org.apache.tiles.web.startup.TilesListener.<init>(TilesListener.java:49) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
at java.lang.reflect.Constructor.newInstance(Unknown Source) 
at java.lang.Class.newInstance0(Unknown Source) 
at java.lang.Class.newInstance(Unknown Source) 

Любая идея?

Я потратил 30 минут на поиски, но не смог найти возможного разрешения.

Пожалуйста, помогите мне ...

ответ

96

Вы включили зависимость от API SLF4J, которую вы используете в своем приложении для ведения журнала, но вы также должны включить реализацию, которая выполняет реальную работу по протоколированию.

Например, чтобы войти через Log4J вы бы добавить эту зависимость:

<dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.5.2</version> 
    </dependency> 

Рекомендуемая реализация будет Logback-классик, который является преемником Log4j, сделал те же ребята, которые сделали SLF4J и Log4J:

<dependency> 
    <groupId>ch.qos.logback</groupId> 
    <artifactId>logback-classic</artifactId> 
    <version>0.9.24</version> 
</dependency> 

Примечание. Возможно, версии могут быть неверными.

+6

Чтобы быть точным, logback является fork log4j, а не преемником. –

+3

org.slf4j SLF4J-log4j12 1.5.2 Добавлена ​​выше зависимость, и она работала ... 'Спасибо, ребята за все replies' – javanoob

+10

Logback не форк log4j, действительно это преемник. Он действительно не делится кодом с Log4j и Ceki Gülcü, создателем обеих фреймворков, четко заявил, что при его создании: http://ceki.blogspot.fr/search?д = Logback. – PomCompot

8

Вы включили зависимость для апи sflj, но не зависимость для реализации API, то есть отдельный сосуд, вы можете попробовать SLF4J-простой-1.6.1 .jar.

+1

Это сработало для меня. Я много лет использую приложение на TomCat. Пробовал работать на JBoss 5.1.1, и ему нужна эта библиотека. Я не знаю, почему это не нужно на TomCat ..... – AgilePro

1

Добавьте все плитки для плитки, такие как (плитки-jsp, плитка-сервлет, плитка-шаблон, плитки-extras.tiles-core) в папку вашего сервера lib и путь сборки приложения, тогда она работает, если вы используете хвосты apache с spring mvc application

0

Скопируйте все записи заказа домашнего файла .iml в файл /src/main/main.iml. Это решит проблему.