V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fmvp520
V2EX  ›  Java

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

  •  
  •   fmvp520 · 2022-08-10 11:44:44 +08:00 · 2031 次点击
    这是一个创建于 570 天前的主题,其中的信息可能已经有所发展或是发生改变。

    由于项目安全升级,需要升级到最新的 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 冲突了。但是不知道怎么处理 麻烦各位老哥了。

    7 条回复    2022-08-15 16:09:38 +08:00
    cweijan
        1
    cweijan  
       2022-08-10 12:17:57 +08:00
    要么降级 tomcat 要么升级 spring 版本, 但是升级 spring 版本估计也有兼容问题, 最好还是降级 tomcat 吧
    zed1018
        2
    zed1018  
       2022-08-10 12:30:40 +08:00   ❤️ 1
    spring boot 3 还没有 GA ,你别直接 tomcat 10 ,升级 9 的安全更新版本就好了。一般补丁都会 backport 的。
    lzrainchen
        3
    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
        4
    fmvp520  
    OP
       2022-08-10 13:35:32 +08:00
    好的 谢谢各位老哥的帮助 ,我这边还是再尝试一下 升级 tomcat10.
    我先按照 @lzrainchen 老哥说的试试。
    fmvp520
        5
    fmvp520  
    OP
       2022-08-10 13:36:14 +08:00
    iPisces77
        6
    iPisces77  
       2022-08-11 09:13:30 +08:00
    建议先用 9 版本的,命名空间不兼容,spring 目前 GA 的都还是 JavaEE 的命名空间
    fmvp520
        7
    fmvp520  
    OP
       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 包,才能部署 -。-
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1757 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 00:41 · PVG 08:41 · LAX 16:41 · JFK 19:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.