Tomcat 7 - 无法加载X类警告

时间:2011-10-17 19:52:08

标签: tomcat7

最近我注意到,在从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)

应用程序仍然可以正常运行,只需滚动所有这些警告以进入调试行就很痛苦。有关如何修复这些警告的想法吗?

4 个答案:

答案 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,问题也解决了。

或者,如果有帮助的话 另外两个解决方案

  1. 修改webapps中每场战争的web.xml,并将web-app版本从3.0更改为2.5 或
  2. 将metadata-complete = true添加到web-app标记