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

Jenkins部署WAR包至Tomcat 10失败,Tomcat 9可正常运行

Tomcat 10部署WAR包失败(Tomcat 9正常)的排查与解决

核心问题定位

从部署日志可见,WAR包已成功上传至Tomcat,但上下文启动失败。这是Tomcat 10与Tomcat 9的核心兼容性差异导致:Tomcat 10基于Jakarta EE 9,将原javax.*命名空间完全迁移至jakarta.*,而你的WAR包基于Tomcat 9(Java EE 8,依赖javax.*)构建,直接部署会触发API不兼容问题。

具体解决步骤

1. 迁移Servlet API依赖与代码

  • 替换构建依赖:将所有javax.servlet、javax.servlet.http、javax.annotation等相关依赖替换为jakarta.*版本。以Maven为例:
    <!-- 替换前 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    <!-- 替换后 -->
    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>5.0.0</version>
        <scope>provided</scope>
    </dependency>
    
  • 修改代码导入语句:将所有import javax.servlet.*、import javax.servlet.http.*等替换为import jakarta.servlet.*、import jakarta.servlet.http.*。

2. 升级第三方框架至兼容版本

确保项目使用的所有框架支持Jakarta EE 9:

  • Spring Framework:升级至5.3.x及以上版本
  • Spring Boot:升级至2.4.x及以上版本
  • MyBatis:升级至3.5.9及以上版本
  • Struts:升级至6.x及以上版本

3. 查看Tomcat本地日志定位具体异常

Jenkins部署日志仅提示启动失败,需查看Tomcat服务器本地日志获取详细错误:

  • 检查TOMCAT_HOME/logs/catalina.out或TOMCAT_HOME/logs/localhost.log,日志中会包含上下文启动时的完整异常栈(如类找不到、方法不存在等),帮助精准定位未迁移的依赖或代码。

4. 修正Jenkins部署配置

检查Jenkins的Deploy war/ear to a container构建步骤:

  • 确认容器类型选择的是Tomcat 10.x,而非日志中显示的Tomcat 9.x,避免Cargo工具使用不兼容的部署协议。

补充验证

修改完成后,先在本地Tomcat 10环境手动部署测试,确认应用启动正常后,再通过Jenkins重新执行部署流程。


内容的提问来源于stack exchange,提问作者Vivek Reddy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:54:20