2011-01-24 127 views
12

我想在Eclipse上设置一个Web应用程序。我正在使用Tomcat 6.0和jdk 1.6.0_23。 出于某种原因,我得到这个错误:Log4jConfigListener无法找到 - 上下文无法启动

 
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和所有必需的弹簧库。

我很困惑,尤其是因为该项目在另一台计算机上工作正常。任何有关这个问题的帮助将不胜感激。

Naftal

+0

你能列出你包含的库吗 – 2011-01-24 09:05:47

+0

我使用的是Hibernate,所以我有hibernate库,如hibernate-annotations.jar,hibernate3.jar等。但根据stacktrace,似乎我错过了springframework librabries之一。我有这些春天图书馆: - spring.jar,spring-aop.jar,spring-aspects.jar,spring-beans.jar,spring-context.jar,spring-context-support.jar,spring-core.jar,spring -jdbc.jar,spring-test.jar,spring-web.jar,spring-webmvc.jar – 1000Suns 2011-01-24 09:08:55

+0

确定那么没有弹簧罐,是吗? – 2011-01-24 09:12:54

回答

4

的org.springframework.web.util.Log4jConfigListener类是绝对不会在类路径。

我建议的第一件事就是将Tomcat中的日志记录级别(在conf文件夹中)设置为“ALL”或“DEBUG”,以便您可以确切地看到容器中发生了什么正在阻止该类被发现。

其次,我建议你运行的grep检查您的JAR文件丢失的类文件,如果在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 

请确保您有只在其中一个文件夹只有一个log4j的JAR文件。

+0

我将删除所有的库并从头开始。感谢您的帮助。 – 1000Suns 2011-01-24 09:41:18

3

如果您正在使用maven和eclipse

1)看在你的web项目.classpath文件。如果您有一个类路径条目“org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER”,那么请确保该属性也在那里。 2)如果这不起作用,那么在eclipse中右键单击您的Web项目并转至属性 - > JavaEE模块依赖关系。确保Maven Dependencies框被选中。

然后保存,建立部署内容十分重要

+0

嘿,谢谢,这对我的日食helios! – Badal 2013-04-11 06:44:15

36

Reticulogic的第二个建议是正确的。但是,在Eclipse Helios中,“Java EE Module Dependencies”选项已被删除。赫利奥斯公司的解决方法是如下:

  1. 右键点击Eclipse中的项目并转到属性 - >部署大会
  2. 点击“添加...“
  3. 选择‘Java构建路径条目’,然后单击‘下一步’
  4. 选择‘Maven依赖’,然后单击‘完成’
1

一个简单的解决办法是清理在Eclipse Tomcat目录。它工作了我。

0

如果使用,log4j2,你可以找到这些类

org.apache.logging.log4j.web.* 

包。