记一次tomcat10升级之后的坑

前言

我的毕业设计 《基于Android的云笔记设计与实现》 交互模块(用户登录、同步等)用的是 servlet,部署于云服务器的tomcat中。今天看到Tomcat官网上发布了Tomcat 10.0.0-M1 ,便像往常一样把下载好的.tar.gz解压到服务器更新。

问题

本以为更新成功了,有小伙伴给我反馈出现了无法登录的问题,从toast弹出的HTML源码来看,大概是404错误。无法登录
于是我到服务端核查,发现jsp静态页面可以访问,但是所有servlet都报404错。多次重新打包+部署war包到服务端,也无法解决问题。

官方解决方案

最后再次来到tomcat官网,原来是在tomcat10之后,将Java EE 的命名空间全部迁移到Jakarta,导致原本打包的war包内封装的.class文件全部失效,需要使用官方提供的迁移工具 tomcat-jakartaee-migration 进行迁移。
tomcat官网

实现

克隆迁移工具

这个没什么好说的,直接在git bash里克隆tomcat-jakartaee-migration的仓库。

git clone git@github.com:apache/tomcat-jakartaee-migration.git

安装Maven

按照迁移工具的说明,需要使用Maven对克隆的源码进行构建。我们来到Maven官网,根据自己的os进行下载。
这里以Windows为例,下载 apache-maven-x.x.x-bin.zip ,如果是Linux系统请下载上方的 .tar.gz 文件。下载到的是二进制文件,不需要安装,直接解压到一个目录即可。
下载Maven
为了方便使用,可以设置环境变量
系统变量列表中:

  • 增加MAVEN_HOME,值为解压Maven的根目录
  • PATH中添加Maven二进制文件的路径,即为%MAVEN_HOME%\bin
    系统变量
    设置完成后,确保在终端中输入mvn -v能显示当前maven的版本。
    成功配置环境变量

编译迁移工具

来到刚才克隆迁移工具的目录,使用

mvn verify

对源代码进行编译,因第一次启动Maven可能要下载很多依赖,请耐心等待,直到看到编译成功的提示。
编译成功

使用迁移命令重新生成war包

来到迁移工具目录下的target文件夹,找到刚才编译生成的
jakartaee-migration-x.x.x-SNAPSHOT-shaded.jar,使用

java -jar jakartaee-migration-x.x.x-SNAPSHOT-shaded.jar <source> <destination>

对war包进行重新编译。
其中<source> 填需要迁移的war包的路径,<destination>填生成新war包的路径,如

java -jar .\jakartaee-migration-0.0.2-SNAPSHOT-shaded.jar D:\progress_note_server.war D:\new.war

即可看到使用迁移命令生成了新的war包,现在部署到服务器上,即可恢复业务。
迁移war包

后记

目前eclipse还不支持使用tomcat 10作为server,因此目前打包好war包后都需要使用该迁移工具进行再次打包。

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值