You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 11 Web应用部署Tomcat 8.5遇ClassNotFoundException: Document错误求助

Tomcat 8.5(Java 11环境)部署WAR包失败:ClassNotFoundException: Document

问题场景

已花费一周尝试将Web应用WAR包部署到Apache Tomcat 8.5(Java 11环境),部署时抛出以下错误:

22-Dec-2022 10:11:40.237 SEVERE [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Error deploying web application archive [C:\Program Files\Apache Software Foundation\Tomcat 8.5\webappssso\lm.war]
java.lang.IllegalStateException: Error starting child
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:757)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:727)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:695)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1016)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1903)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: org.apache.catalina.LifecycleException: Failed to start component StandardEngine[Catalina].StandardHost[localhost].StandardContext[/lm]]
at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:753)
... 9 more
Caused by: java.lang.NoClassDefFoundError: Document
at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3166)
at java.base/java.lang.Class.getDeclaredMethods(Class.java:2309)
at org.apache.catalina.util.Introspection.getDeclaredMethods(Introspection.java:133)
at org.apache.catalina.startup.WebAnnotationSet.loadMethodsAnnotation(WebAnnotationSet.java:285)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:138)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:69)
at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:328)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:782)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:299)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5130)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
... 10 more
Caused by: java.lang.ClassNotFoundException: Document
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1420)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1228)
... 23 more

解决方案

  • 补全缺失的依赖包
    Document类通常属于XML解析相关库(如dom4j、JAXB、w3c dom API等)。检查WAR包的WEB-INF/lib目录,确认是否包含对应jar包。如果是Maven/Gradle项目:

    • Maven:确保依赖未被标记为<scope>provided</scope>(除非Tomcat确实提供该类),执行mvn clean package重新打包。
    • Gradle:检查war任务的依赖包含情况,执行gradle clean war重新构建。
  • 修正类引用的全限定名
    错误日志仅显示Document,说明代码中可能存在无包名的类引用或导入错误。检查代码:

    • 确认是否正确导入org.w3c.dom.Document(JDK自带)或org.dom4j.Document(第三方库)等全限定类名。
    • 排查是否存在拼写错误或漏写包名的情况。
  • 排查类加载冲突
    Tomcat的lib目录可能自带部分XML相关库,与应用依赖的版本冲突。可以:

    • 移除应用WEB-INF/lib中与Tomcat自带库冲突的jar包。
    • 若必须保留,可调整Tomcat类加载策略(谨慎操作,优先调整自身依赖)。
  • 验证Java 11兼容性
    Java 11移除了JAXB等模块,若应用依赖这些模块,需手动引入对应依赖。Maven示例:

    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.1</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.3.1</version>
        <scope>runtime</scope>
    </dependency>
    
  • 清理缓存重新部署
    清理Tomcat的work目录(删除所有子文件夹),同时清理项目构建缓存后重新生成WAR包,再部署到Tomcat。

内容的提问来源于stack exchange,提问作者prabhakaran G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 01:01:18