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

WildFly部署JSF项目遭遇NoClassDefFoundError问题求助

JSF项目部署WildFly报错及配置修复

项目配置(pom.xml)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.example</groupId>
<artifactId>lab3</artifactId>
<version>1.0-SNAPSHOT</version>

<packaging>war</packaging>

<dependencies>
    <dependency>
        <groupId>javax.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.1</version>
    </dependency>
    <dependency>
        <groupId>javax.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>1.2-20</version>
    </dependency>
    <dependency>
        <groupId>javax.faces</groupId>
        <artifactId>javax.faces-war-archetype</artifactId>
        <version>2.2</version>
    </dependency>
    <dependency>
        <groupId>jakarta.platform</groupId>
        <artifactId>jakarta.jakartaee-api</artifactId>
        <version>9.1.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

<build>
    <finalName>lab3</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.3.1</version>
            <configuration>
                <webXml>src\main\webapp\WEB-INF\web.xml</webXml>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
        </plugin>
    </plugins>
</build>

<properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
</properties>

启动报错信息

13:16:20,965 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-6) WFLYSRV0028: Stopped deployment lab3.war (runtime-name: lab3.war) in 14ms
[2022-10-12 01:16:20,998] Artifact lab3.war: Error during artifact deployment. See server log for details.
[2022-10-12 01:16:20,998] Artifact lab3.war: java.lang.Exception: {"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"lab3.war\".undertow-deployment.UndertowDeploymentInfoService" => "Failed to start service
    Caused by: java.lang.NoClassDefFoundError: Failed to link javax/faces/webapp/FacesServlet (Module \"deployment.lab3.war\" from Service Module Loader): javax/servlet/Servlet"}} 

额外问题

无论是自行搭建的项目,还是他人的现成项目,均无法正常运行;同时target目录中生成的web.xml存在异常情况。


问题根源及修复方案

问题分析

报错核心原因是依赖版本混乱+命名空间不兼容:

  1. 混用旧的javax.faces依赖(JSF 1.2/2.1)与Jakarta EE 9.1的jakarta.jakartaee-api,两者命名空间从javax改为jakarta,完全不兼容;
  2. JSF依赖版本不统一(api是2.1,impl是1.2),引发类加载冲突;
  3. 错误引入javax.faces-war-archetype,这是Maven原型模板,并非运行依赖,完全无需加入pom。

修复步骤

  1. 清理并统一依赖
    删除旧的javax.faces相关依赖,替换为与Jakarta EE9匹配的Jakarta Faces依赖;移除无用的原型依赖。修正后的dependencies块如下:
<dependencies>
    <!-- Jakarta Faces 3.0,对应Jakarta EE9 -->
    <dependency>
        <groupId>jakarta.faces</groupId>
        <artifactId>jakarta.faces-api</artifactId>
        <version>3.0.0</version>
        <scope>provided</scope> <!-- WildFly 26+自带JSF3,设为provided即可 -->
    </dependency>
    <!-- 若WildFly未自带JSF,可添加实现包,否则无需 -->
    <!--
    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>jakarta.faces</artifactId>
        <version>3.0.0</version>
    </dependency>
    -->
    <dependency>
        <groupId>jakarta.platform</groupId>
        <artifactId>jakarta.jakartaee-api</artifactId>
        <version>9.1.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
  1. 检查并修正web.xml
    确保web.xml版本与Jakarta EE9匹配(使用web-app_4_0.xsd或更高,命名空间改为jakarta.servlet相关)。示例web.xml头部:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_4_0.xsd"
         version="4.0">

同时将FacesServlet的类路径改为jakarta.faces.webapp.FacesServlet(替换旧的javax.faces.webapp.FacesServlet)。

  1. 验证WildFly版本
    确认使用的WildFly版本支持Jakarta EE9(如WildFly 26及以上),旧版本仅支持javax命名空间的JEE规范,无法兼容Jakarta EE9依赖。

  2. 重新构建部署
    执行mvn clean install清理旧构建文件,重新打包后部署到WildFly。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:25:31