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
相关产品推荐
相关产品推荐

