【分享】解决 tomcat10 部署润乾报表兼容性问题

问题背景

在部署润乾报表 demo 应用时遇到启动失败问题,具体环境配置为:
JDK 版本:12.0.2
Tomcat 版本:apache-tomcat-10.1.33
报错信息:未找到 HttpSessionListener 类

1png

问题根源分析

Tomcat 10 及更高版本作为从 Java EE 到 Eclipse Foundation 迁移的一部分,已经完成了从 Java EE 到 Jakarta EE 的技术转型。这一迁移导致所有实现 API 的主要软件包发生了根本性变化:
旧版(Tomcat 9 及以下): javax.* 包
新版(Tomcat 10 及以上): jakarta.* 包
同样的兼容性问题也出现在 Spring Boot 3 等基于高版本 JDK 的框架中,因为它们本质上也是基于 Tomcat 10 构建的。

解决方案:JAR 包迁移转换

准备工作

下载迁移工具,访问 Apache 官方迁移工具下载页面,推荐下载 shaded 版本。shaded 版本为一体化工具,无需额外依赖。https://tomcat.apache.org/download-migration.cgi

2png

迁移操作步骤

步骤 1:收集需要转换的 JAR 包
将下载的 jakartaee-migration-1.0.10-shaded.jar 放在 E 盘目录下,并且在 E 盘目录下新建两个文件夹,分别为 javaxlib 和 jakartalib,将设计器下安装目录 \report\web\webapps\demo\WEB-INF\lib 下的 jar 包全部复制到 javaxlib 目录下。
步骤 2:执行迁移转换
在 E 盘根目录打开命令行工具,执行以下命令:
java -jar jakartaee-migration-1.0.10-shaded.jar ./javaxlib ./jakartalib -profile=EE

3png

参数说明
./javaxlib:源 JAR 包目录
./jakartalib:目标输出目录
-profile=EE:指定转换配置文件为 EE
等待程序执行完成,当看到 "successfully" 标志时,表示迁移成功。在新建的 jakartalib 文件夹中也可看到转换成功的所有 jar 包文件。
步骤 3:替换应用依赖
将 jakartalib 目录中的转换后 JAR 包复制到应用的 WEB-INF/lib 目录中。
重新部署 demo 应用,即可在 tomcat10 及以上版本成功部署。
具体部署操作可以参考 tomcat 部署润乾报表完整过程