请教一下服务升级 tomca10 最新版, javax 改名 Jakarta 的问题

2022-08-10 11:44:44 +08:00
 fmvp520

由于项目安全升级,需要升级到最新的 tomca10.1.0-M17 ,之前的服务放到新的 tomcat 启动失败,

严重 [main] org.apache.catalina.core.StandardContext.listenerStart 配置应用程序监听器[org.springframework.web.util.WebAppRootListen
er]错误
        java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener

于是我把 javax 的包也放到 tomcat 的 lib 下,然后看了下 tomcat 这个版本需要使用到 Jakarta 6.0 的版本。我也在对应的 build.gradle 将所有的 javax 的依赖换成了最新的 Jakarta 版本。 然后启动又报错

java.lang.ClassCastException: class org.springframework.web.filter.CharacterEncodingFilter cannot be cast to class jakarta.servlet.Filter 

我发现 spring 的 WEN-INF 下的 web.xml 配置了 org.springframework.web.filter.CharacterEncodingFilter,这个 CharacterEncodingFilter 类是 spring 的,它依赖的是 javax 的包。

这个问题我看了两天 也不知道怎么解决。我怀疑是 tomcat 启动使用的 Jakarta ,但是 spring 项目 CharacterEncodingFilter 使用的 javax 冲突了。但是不知道怎么处理 麻烦各位老哥了。

2130 次点击
所在节点    Java
7 条回复
cweijan
2022-08-10 12:17:57 +08:00
要么降级 tomcat 要么升级 spring 版本, 但是升级 spring 版本估计也有兼容问题, 最好还是降级 tomcat 吧
zed1018
2022-08-10 12:30:40 +08:00
spring boot 3 还没有 GA ,你别直接 tomcat 10 ,升级 9 的安全更新版本就好了。一般补丁都会 backport 的。
lzrainchen
2022-08-10 12:55:40 +08:00
理论上来讲,Java EE 8 (2017 年 8 月 31 日)已经结束了,之后就没有 Java EE 了。原文是这么说的 Oracle waves good-bye to Java Enterprise Edition, as the Eclipse Foundation takes over Java EE under a new name, Jakarta, and without the "Java" trademark 。所以以后基于 Java EE 的规范,比如 Servlet 等都需要做不兼容的升级
你可以使用工具来将原来的 javax 包名的项目转换到新的项目下:
GitHub 在这里: https://github.com/apache/tomcat-jakartaee-migration
或者这里: https://tomcat.apache.org/download-migration.cgi
fmvp520
2022-08-10 13:35:32 +08:00
好的 谢谢各位老哥的帮助 ,我这边还是再尝试一下 升级 tomcat10.
我先按照 @lzrainchen 老哥说的试试。
fmvp520
2022-08-10 13:36:14 +08:00
iPisces77
2022-08-11 09:13:30 +08:00
建议先用 9 版本的,命名空间不兼容,spring 目前 GA 的都还是 JavaEE 的命名空间
fmvp520
2022-08-15 16:09:38 +08:00
@iPisces77 谢谢。目前我这边升级 tomcat10 成功了。主要就是安照 3 楼大哥的解答,也是 tomcat 官网的解决方案。先将之前的项目 war 包使用工具转换后就可以部署到 tomcat10 了,但是启动的时候又遇到其他的一些问题,
java.lang.NoClassDefFoundError: sun/reflect/Reflection
在网上找了一圈,尝试了一下 没有成功解决这个问题。于是我就替换了相关的工具包,因为项目使用了 hutool 工具包,里面有使用 sun.reflect.Reflection 我就换了对于使用相关的方法做改用其他工具包做了替换。基本一些问题都是用了替换方法完成了升级~
就是这样比较麻烦 每次都需要使用工具转换 war 包,才能部署 -。-

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/871890

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX