8

我正在尝试在我的 tomcat 环境中查找配置问题。我们的生产服务器正在运行一个 tomcat 安装并从一个共享的 NFS 挂载读取战争。

但是,当我用一个独立的盒子(使用他们的配置)尝试同样的战争时,我得到了下面发布的错误。

有趣的是,如果我将 WEB-INF/lib 中的所有 jar 解压缩到 WEB-INF/classes 中,这个错误就会消失。

所以,似乎有什么东西阻止了应用程序加载 WEB-INF/lib 路径,但我一生都找不到任何会导致这种情况的 tomcat 设置,因为它正在检测应用程序和配置,只是没有包括的罐子。

有任何想法吗?

严重:配置类 org.springframework.web.context.ContextLoaderListener java.lang.ClassNotFoundException 的应用程序侦听器时出错:org.apache.catalina.loader.WebappClassLoader.loadClass 的 org.springframework.web.context.ContextLoaderListener(WebappClassLoader.java:1387 ) 在 org.apache.catalina.core.StandardContext 的 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3786) 的 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)。在 org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) 在 org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) 在 org.apache 开始(StandardContext.java:4342) .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) 在 org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) 在 org.apache.catalina.util .LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) 在 org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) 在 org.apache.catalina.core.StandardHost.start(StandardHost.java:719) 在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) 在 org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 在 org.apache.catalina.startup.Catalina .start(Catalina.java:578) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 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) 2011 年 12 月 20 日下午 4:20:38 org.apache.catalina.core.StandardContext listenerStart 严重:配置类 org.springframework.security.web.session.HttpSessionEventPublisher java.lang.ClassNotFoundException 的应用程序侦听器时出错:org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java 中的 org.springframework.security.web.session.HttpSessionEventPublisher :1387) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3786) 在 org.apache.catalina.core。 StandardContext.start(StandardContext.java:4342) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771) at 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) 在 org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) 在 org. apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) 在 org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) 在 org.apache.catalina.core.StandardHost.start(StandardHost. java:719) 在 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) 在 org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 在 org.apache.catalina.startup .Catalina.start(Catalina.java:578) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 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。主要(Bootstrap.java:413)core.StandardServer.start(StandardServer.java:710) 在 org.apache.catalina.startup.Catalina.start(Catalina.java:578) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 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:288) 在 org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)core.StandardServer.start(StandardServer.java:710) 在 org.apache.catalina.startup.Catalina.start(Catalina.java:578) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 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:288) 在 org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)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:288) 在 org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)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:288) 在 org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)

4

2 回答 2

3

所以,我仍然没有理由说明为什么会发生这种情况,但我终于能够让它发挥作用。通常,我们使用“解压缩”将战争解压到部署目录中。我将它切换为使用“jar”,一切都神奇地起作用。

知道为什么会这样。我尝试了所有其他排列(检查我们的部署文件夹、符号链接、权限、所有权等),这是唯一产生影响的事情,即使区分两个解压缩的文件夹也表明它们是相同的,具有相同的权限,但是一个工作,一个没有

另外值得注意的是:生产部署多年来一直使用“解压缩”。我真的无法弄清楚这一点,但我很高兴我至少可以从事其他工作。

于 2011-12-22T20:07:13.443 回答
2

需要研究的一件事是,ClassNotFoundException 并不总是意味着未找到列出的类(在您的情况下为 org.springframework.web.context.ContextLoaderListener),这可能意味着无法加载该类。

如果该特定类由于任何原因未能加载,例如它有一个引用另一个未找到的类的静态块,则类加载器将加载失败报告为“ClassNotFoundException”。

确保您的 WEB-INF/lib 目录不包含同样存在于 Tomcat 默认库中的类/jar。如果有多个版本,这有时会导致加载失败。通过将 jar 解压缩到 classes 目录中,您可能会按路径顺序移动类,这就是它可以工作的原因。

于 2011-12-21T15:49:52.393 回答