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

升级Jetty到9.4.43.v20210629启动报NoClassDefFoundError如何解决

排查思路
  • 核对Jetty 9.4.43与jasper依赖的版本匹配性:Jetty 9.4.x小版本迭代时会同步升级内置JSP实现(jasper)的依赖版本,若你手动引入了独立的jasper包,版本和Jetty 9.4.43要求的版本不兼容,就会出现编译期可读取类、运行期类加载链路不匹配的问题。Maven项目可执行mvn dependency:tree、Gradle项目可执行gradle dependencies过滤jetty、jasper相关依赖,检查是否存在版本冲突、重复引入的情况。
  • 检查Jetty类加载优先级配置:Jetty 9.4.33到9.4.43迭代期间调整过WebAppContext的类加载顺序默认规则,旧版本默认优先加载服务端提供的jar,后续小版本可能调整为优先加载WEB-INF下的jar,如果你的WEB-INF下存在和Jetty服务端冲突的jasper相关jar,会直接触发类加载异常。你可以打印当前WebAppContext的parentLoaderPriority配置值,确认规则是否符合业务预期。
  • 确认打包产物完整性:如果是打独立war包部署,检查war包内WEB-INF/lib目录下是否存在多个版本的jasper相关jar,或者是否存在Jetty 9.4.33版本的旧残留依赖,避免运行时加载错误版本的类。
修复方案
  • 统一通过Jetty官方bom管理依赖:Maven项目引入jetty-bom,所有jetty相关依赖不要单独标注版本号,避免版本不匹配问题;jasper相关依赖直接使用Jetty官方提供的jetty-jsp模块即可,不要单独引入独立的apache jasper包。
  • 显式配置类加载优先级:如果业务必须在WEB-INF下引入自定义的jasper相关包,可以在Jetty的WebAppContext配置中显式设置setParentLoaderPriority(false);如果要优先使用Jetty服务端的jasper包,则设置为true,适配你的业务场景。
  • 排除冲突依赖:如果依赖树中查出第三方包间接引入了旧版本的jetty或者jasper依赖,在对应的依赖配置中加入排除规则,保证所有相关依赖的版本和当前使用的Jetty 9.4.43版本完全一致。

内容的提问来源于stack exchange,提问作者master_hemant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 13:06:01