Log4jConfigListener не может быть найден - контекст не запускается
Я пытаюсь настроить веб-приложение на Eclipse. Я использую Tomcat 6.0 и jdk 1.6.0_23.
По какой-то причине я получаю эту ошибку:
SEVERE: Error configuring application listener of class org.springframework.web.util.Log4jConfigListener
java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4078)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Jan 24, 2011 11:44:08 AM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4078)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
at org.apache.catalina.core.StandardService.start(StandardService.java:519)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Я проверил, все ли библиотеки добавлены в путь сборки, и все кажется правильным. log4j-1.2.15.jar включен и все необходимые библиотеки spring.
Я очень смущен тем, что проблема, особенно потому, что проект работал нормально на другом компьютере. Любая помощь с этой проблемой будет высоко оценена.
Нафталь
Ответы
Ответ 1
Класс org.springframework.web.util.Log4jConfigListener определенно не входит в ваш путь к классам.
Первое, что я хотел бы предложить, - включить уровень ведения журнала в Tomcat - в папке conf - на "ALL" или "DEBUG", чтобы вы могли точно видеть, что происходит в контейнере, который предотвращая обнаружение этого класса.
Во-вторых, я бы рекомендовал вам проверить файлы JAR для отсутствующего файла класса, запустив grep, если на linux/mac:
# run at the root of your lib folders:
grep -ri "org.springframework.web.util.Log4jConfigListener" *
Вышеупомянутая команда вернет все файлы JAR, содержащие этот пакет. Как только JAR файл изолирован, вы можете продолжить поиск.
В-третьих, убедитесь, что у вас нет конфликтов. Несколько версий Log4j, находящихся в вашем пути к классам, могут привести к хаосу. Как система должна знать , который org.springframework.web.util.Log4jConfigListener пакет для загрузки, если их 2? У Tomcat есть 3 разные папки:
shared/lib
lib
webapps/yourapp/WEB-INF/lib
Убедитесь, что у вас есть только один файл JAR4J JAR только в одной из этих папок.
Ответ 2
Ретикулогическое второе предположение верно. Однако в Eclipse Helios была отключена опция "Зависимости модуля Java EE". Исправление для Helios выглядит следующим образом:
- Щелкните правой кнопкой мыши на своем проекте в Eclipse и откройте "Свойства" → "Развертывание сборки"
- Нажмите "Добавить..."
- Выберите "Записи пути сборки Java" и нажмите "Далее"
- выберите "Maven Dependencies" и нажмите "Finish"
Ответ 3
Если вы используете maven и eclipse
1) Посмотрите в свой файл .classpath вашего веб-проекта. Если у вас есть запись в classpath "org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER", убедитесь, что атрибут также существует.
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
2) Если это не сработает, щелкните правой кнопкой мыши на своем веб-проекте в затмении и перейдите в Свойства → зависимости JavaEE. Убедитесь, что установлен флажок Зависимости Maven.
Затем сохраните, постройте развертывание yada yada
Ответ 4
Простым решением является очистка каталога Tomcat в Eclipse. Это сработало для меня.
Ответ 5
Если вы используете log4j2, вы можете найти эти классы в
org.apache.logging.log4j.web.*
пакет.