最近我注意到,在从Eclipse部署Web应用程序到Tomcat 7之后,我在Catalina日志文件中收到了30多条警告,如下所示:
2011年10月17日下午3:33:47 org.apache.catalina.startup.ContextConfig checkHandlesTypes警告:无法加载类 [com.sun.codemodel.JArrayClass $ 1]检查@HandlesTypes 一个或多个ServletContentInitializers的注释。 java.lang.ClassNotFoundException:com.sun.codemodel.JArrayClass $ 1 at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) 在 org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:1969) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:1932) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1826) 在 org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1785) 在 org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1771) 在 org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1254) 在 org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:881) 在 org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:316) 在 org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 在 org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:89) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5103) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) 在 org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:812) 在 org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:787) 在 org.apache.catalina.core.StandardHost.addChild(StandardHost.java:607) 在 org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:932) 在 org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:723) 在 org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470) 在org.apache.catalina.startup.HostConfig.start(HostConfig.java:1322) 在 org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) 在 org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 在 org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:89) 在 org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:379) 在 org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:324) 在 org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1041) 在 org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:774) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) 在 org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033) 在 org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:291) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) 在 org.apache.catalina.core.StandardService.startInternal(StandardService.java:443) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) 在 org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:727) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) 在org.apache.catalina.startup.Catalina.start(Catalina.java:620)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java.lang.reflect.Method.invoke(Method.java:597)at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:303)at at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:431)
应用程序仍然可以正常运行,只需滚动所有这些警告以进入调试行就很痛苦。有关如何修复这些警告的想法吗?
答案 0 :(得分:3)
事实证明,部署时不需要jaxb-xjc.jar,因此我最终将其从类路径中删除,最终消除了所有警告消息。
答案 1 :(得分:3)
以下论坛帖子还概述了使用Metro 2.1.1与Servlet 3.0 WebApps时出现的问题 - 也可能有价值: http://www.java.net/forum/topic/glassfish/metro-and-jaxb/metro-211-and-servlet-version-30-tomcat-many-startup-errors
答案 2 :(得分:1)
检查您的依赖项。其中一个(或多个)包含META-INF/services/javax.servlet.ServletContainerInitializer
文件。此文件包含类型ServletContainerInitializer
的类名。 ServletContainerInitializer
通常有@HandlesTypes
注释引用类。其中一个引用的类导入/使用com.sun.codemodel.JArrayClass
,它不在您的webapp的类路径中。
这个问题也很有用:Class implementing ServletContainerInitializer in web.xml
答案 3 :(得分:0)
我遇到了与tomcat 7.0.23版相同的问题。切换到Tomcat 7.0.33之后,我没有注意到这个问题。
即使我刚用最新的tomcat替换了$ {tomcat.dir} / lib / * jars,问题也解决了。
或者,如果有帮助的话 另外两个解决方案