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

WildFly 18.0.1升级至23.0.2+Java11的EAR应用迁移报错求助

问题分析与解决方案

这个错误的核心是类加载时无法找到jakarta.servlet.Servlet,本质是迁移过程中依赖配置或类路径存在不一致,以下是针对性的解决步骤:

1. 确认依赖库的Jakarta版本兼容性

  • 确保项目中所有与Servlet、JSF相关的依赖都已从javax.*切换为jakarta.*坐标,比如:
    • Servlet API:从javax.servlet:javax.servlet-api替换为jakarta.servlet:jakarta.servlet-api:4.0.4(对应Jakarta EE 8)
    • JSF API:从javax.faces:javax.faces-api替换为jakarta.faces:jakarta.faces-api:2.3.14
  • 依赖的scope设置正确:Servlet/JSF API这类容器提供的库,需要设置为provided,避免打包到WAR/EAR中与WildFly内置的Jakarta类库冲突。

2. 检查WAR/EAR的部署描述符

  • web.xml中所有javax命名空间要替换为jakarta,比如:
    原web.xml根元素:
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="4.0">
    
    替换为:
    <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" version="4.0">
    
  • 检查faces-config.xml的命名空间,同样替换为Jakarta的:
    <faces-config xmlns="https://jakarta.ee/xml/ns/jakartaee" version="2.3">
    

3. 清理冲突依赖与缓存

  • 清理项目的Maven/Gradle本地仓库,重新构建,确保没有残留的javax.*版本依赖被打包。
  • 清除WildFly的缓存:删除WildFly安装目录下的standalone/tmp和standalone/data/content文件夹,避免旧的部署残留影响类加载。

4. 检查WildFly模块配置(若自定义了模块)

  • 如果项目依赖自定义WildFly模块,确保这些模块也已迁移到Jakarta包名,且模块的依赖声明正确引用Jakarta版本的API模块(比如jakarta.servlet.api而非javax.servlet.api)。

5. 验证EAR的结构与类加载

  • 确保EAR中的各个模块(WAR、EJB JAR)的类加载配置一致,没有在某个模块中单独引入旧的javax依赖。可以通过检查每个模块的MANIFEST.MF,确认Dependencies声明中引用的是Jakarta相关模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:07:19