繁体   English   中英

Tomcat 6没有从WEB-INF / lib加载jar

[英]Tomcat 6 not loading jars from WEB-INF/lib

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

但是,当我使用独立的盒子(使用它们的配置)尝试相同的战争时,我收到下面发布的错误。

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

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

有任何想法吗?

严重:在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)中配置类org.springframework.web.context.ContextLoaderListener java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener的应用程序侦听器时出错)org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)位于org.apache.catalina.core.StandardContext的org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3786)。在org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)在org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)在org.apache开始(StandardContext.java:4342)位于org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:627)的.catalina.core.StandardHost.addChild(StandardHost.java:525)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的org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)org.apache.catalina.core.StandardHost.start(StandardHost.java:719)。 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(母语法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)在java.lang.reflect.Me thod.invoke(Method.java:597)org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)12月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位于org.apache.catalina.core上的org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)的.session.HttpSessionEventPublisher,位于org.apache.catalina.core的org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) .StandardContext.listenerStart(StandardContext.java:3786)在org.apache.catalina.core.StandardContext.start(StandardContext.java:4342)在org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)在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位于org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)的.catalina.startup.HostConfig.deployApps(HostConfig.java:488)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。 org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)上的StandardHost.start(StandardHost.java:719)位于org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)org .apache.catalina.core.StandardService.start(StandardService.java:516)位于org.apache.catalina.startup.Catalina.start(Catalina)的org.apache.catalina.core.StandardServer.start(StandardServer.java:710) .java:578)在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)org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)org.apache.catalina.startup.Bootstrap.main(Bootstrap.java: 413)

有一点需要注意,ClassNotFoundException并不总是意味着找不到列出的类(在你的情况下是org.springframework.web.context.ContextLoaderListener),它可能意味着无法加载类。

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

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

所以,我仍然没有理由说明为什么会这样,但我终于能够让它发挥作用。 通常,我们使用'unzip'将war解压缩到deploy目录中。 我把它改成使用'jar',一切都神奇地起作用。

知道为什么会这样。 我尝试了所有其他排列(检查我们的部署文件夹,符号链接,权限,所有权等),这是唯一有所作为,甚至差异两个解压缩文件夹显示它们是相同的,具有相同的权限,但一个工作,一个没有

另外值得注意的是:生产部署多年来一直使用'解压缩'。 我真的无法想出这个,但我很高兴我至少可以做其他事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM