2011-01-24 63 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.* 

包。