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

升级到Wildfly 24、Java 16后部署war包出现NoClassDefFoundError如何解决?

异常根因

该异常的核心是类加载失败:Weld内置的WeldApplicationFactory类依赖Jakarta Faces规范的jakarta.faces.application.ApplicationFactory类,但服务类加载器无法匹配到符合要求的类,常见触发原因有三类:

  1. 新旧规范冲突:项目依赖中同时存在旧Java EE的javax.faces包和新Jakarta EE的jakarta.faces包,类命名空间不匹配导致无法加载
  2. 依赖scope配置错误:把Wildfly 24已经原生提供的JSF、Weld相关依赖打包到了WAR的WEB-INF/lib目录下,和服务器内置版本不兼容
  3. Primefaces版本不匹配:Primefaces 10默认提供的是Java EE(javax)版本,未使用带jakarta分类器的适配版本,引入了错误的规范依赖
解决方案
  • 调整所有Jakarta EE 9规范API的依赖scope为provided,包括jakarta.faces-api、jakarta.inject-api、jakarta.servlet-api等,避免打包到WAR包中和服务器内置实现冲突
  • 修正Primefaces 10的依赖配置,添加jakarta分类器适配Jakarta EE 9规范,Maven配置参考如下:
<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>10.0.0</version>
    <classifier>jakarta</classifier>
</dependency>
  • 执行依赖树排查命令mvn dependency:tree,排查所有传递依赖中的javax.faces相关旧包,全部添加排除规则
  • 打包完成后解压WAR包,确认WEB-INF/lib目录下不存在jsf-api、javax.faces、weld-servlet等服务器已提供的依赖包
  • 若需使用自定义版本的JSF实现,需按照Wildfly模块规范将JSF实现添加为服务器模块,不可直接打包到WAR内,同时在WEB-INF/jboss-web.xml中指定使用自定义JSF模块

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:57:00