You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GWT应用从Jetty 9升级到Jetty 11(Java 21)遇类缺失问题求助

GWT + Jetty 11 + Java 21 兼容问题解决方案

解决org.eclipse.jetty.http.HttpURI$Mutable找不到的ClassNotFoundException

  • 确认Jetty依赖完整:Jetty 11重构了HTTP模块,HttpURI$Mutable属于jetty-http核心模块,检查你的依赖配置,确保该模块已正确引入,且所有Jetty依赖版本统一为11.0.16,避免scope设置错误(比如误设为provided导致运行时缺失)。
  • 清理旧版Jetty依赖:Jetty 9.4和11的类结构差异极大,项目中残留的9.x依赖会引发冲突。用mvn dependency:tree(Maven)或gradle dependencies(Gradle)排查依赖树,排除所有Jetty 9.x相关依赖。
  • 适配JPMS模块规则:Java 21强制启用模块系统(JPMS),如果项目使用module-info.java,必须显式声明对Jetty模块的依赖,示例:
    requires org.eclipse.jetty.http;
    requires org.eclipse.jetty.server;
    // 按需添加其他Jetty模块,如org.eclipse.jetty.servlet等
    

解决编译单元缓存写入失败的IOException

  • 修复缓存目录权限:GWT编译缓存默认写入系统临时目录或用户目录,Java 21对文件权限管控更严格,确认运行应用的用户对缓存目录拥有读写权限。也可以手动指定可写的缓存目录:
    -Dgwt.cache.dir=/自定义可写路径
    
  • 临时禁用编译缓存:如果权限问题一时无法解决,可临时关闭GWT编译缓存绕开错误,添加启动参数:
    -Dgwt.nocache=true
    
    注意:禁用缓存会显著减慢编译速度,仅适合调试场景。

GWT与Jetty 11兼容的通用经验

  • 升级GWT到适配版本:GWT 2.9.x及更早版本对Jetty 11支持不足,建议升级到GWT 2.10.0及以上,官方在该版本后优化了对新版Jetty和Java 17+的兼容性。
  • 调整Jetty启动代码:Jetty 11的API有不少变更,比如Server初始化、HttpConfiguration配置方式都和9.4不同,对照Jetty 11官方文档调整启动逻辑,替换过时的API调用。
  • 统一Java编译与运行版本:确保GWT编译器使用的Java版本和Jetty运行环境的Java 21一致,避免跨版本编译导致的类兼容性问题。

内容的提问来源于stack exchange,提问作者Hansjörg Hofer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 09:40:11