2011-12-20 37 views
7

我試圖在我的tomcat環境中跟蹤配置問題。我們的生產服務器正在運行一個tomcat安裝,並從共享的NFS掛載中讀取這個war。但是,當我嘗試與獨立框(與他們的配置)相同的戰爭,我得到下面發佈的錯誤。Tomcat 6未從WEB-INF/lib中加載罐子

有趣的是,如果我將WEB-INF/lib中的所有jar解壓到WEB-INF/classes中,這個錯誤就會消失。

所以,似乎有東西阻止應用程序加載WEB-INF/lib路徑,但我不能在我的生活中找到任何會導致此問題的tomcat設置,因爲它正在檢測應用程序並配置,只是沒有包括的罐子。

任何想法?

重度: 類org.springframework.web.context.ContextLoaderListener 的錯誤配置應用程序監聽拋出java.lang.ClassNotFoundException:在org.apache.catalina.loader org.springframework.web.context.ContextLoaderListener .WebappClassLoader.loadClass(WebappClassLoader.java:1387) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3786 ) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342) at org.apache.catalin在org.apache.catalina.core.StandardHost.addChild(StandardHost。org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) 處的a.core.ContainerBase.addChildInternal(ContainerBase.java:791) 。的java:525)在org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:627) 在org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553) 在org.apache。在org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig。 java:311) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) at org.apa cheg.atalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) at org.apache.catalina.core.ContainerBase.start( ContainerBase.java:1045) 在org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) 在org.apache.catalina.core.StandardService.start(StandardService.java:516) 的組織。 apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup.Catalina.start(Catalina.java:578) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Dele gatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) at org.apache。 catalina.startup.Bootstrap.main(Bootstrap.java:413)Dec 20, 2011 4:20:38 PM org.apache.catalina.core.StandardContext listenerStart SEVERE:配置類 org.springframework.security的應用程序偵聽器時出錯.web.session.HttpSessionEventPublisher java.lang.ClassNotFoundException: org。springframework.security.web.session.HttpSessionEventPublisher 在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387) 在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3786) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342) at org.apache.catalina.core.ContainerBase在org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525) 在org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:627) 個在org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553) 在org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488) 在org.apache.catalina.startup。 HostConfig.start(HostConfig.java:1149) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) at org.apache.catalina.core。 ContainerBase.start(ContainerBase.java:1045) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:516) at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) at org.apache.catalina.startup。 Catalina.start(Catalina.java:578) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl的.java:25) 在java.lang.reflect.Method.invoke(Method.java:597) 在org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) 在org.apache.catalina .startup.Bootstrap.main(Bootstrap.java:413)

+3

是你的罐子通過符號鏈接引用? Tomcat默認不會遵循符號鏈接。 – fge 2011-12-20 21:30:43

+0

不,主要的Web應用程序被鏈接到一個部署文件夾,但即使我把整個應用程序,我仍然得到這個錯誤。 – liam 2011-12-20 21:34:06

+2

我的意思是在WEB-INF/lib目錄罐子。我被咬了足夠的這個錯誤是正確的左右配置Tomcat ... – fge 2011-12-20 21:38:10

回答

2

所以,我仍然沒有理由爲爲什麼這是發生,但我終於能夠得到它的工作。通常,我們使用'unzip'將war解壓到部署目錄中。我把它改成使用'罐子',一切都神奇地運作。

我有沒有想法爲什麼會這樣。我想盡其他置換(查看我們的部署文件夾中,符號鏈接的權限,所有權等),這是件事讓有差別,甚至版本比較兩個解壓縮文件夾顯示他們是一樣的,具有相同的權限,但一個工作,一個沒有

另外值得注意的是:生產展開時一直在使用「解壓縮」多年。我真的無法弄清楚這一點,但我很高興至少能夠做其他事情。

2

有一點需要研究,ClassNotFoundException並不總是意味着列出的類(在你的情況下org.springframework.web.context.ContextLoaderListener)沒有找到,這可能意味着該類無法加載。

如果該特定類因任何原因無法加載,例如它有一個引用另一個未找到的類的靜態塊,則類加載器將報告未能加載爲「ClassNotFoundException」。

確保您的WEB-INF/lib目錄不包含Tomcat默認庫中也存在的類/ jar。如果有多個版本,這有時會導致加載失敗。通過將jars解壓縮到classes目錄中,您可能會按照路徑順序移動類,這就是爲什麼它可以起作用。

+0

非常感謝樂福,但解決辦法最終被更加古怪。 – liam 2011-12-22 20:04:23