当我想启动Wildfly服务器时,有以下错误:
09:26:10,548警告org.jboss.modules.define未能在Service : java.lang.NoClassDefFoundError:未能链接的模块“Deployment.Dem-0.0.1-SNAPSHOT.war”中定义类jakarta.faces.webapp.FacesServlet。
但是,在我更改后(在web.xml文件中):
<servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class>至
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>错误消失了。
我在jakarta.faces-api依赖项的4.0.0版本和3.0.0中都尝试过这种方法:
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/jakarta.faces/jakarta.faces-api -->
<dependency>
<groupId>jakarta.faces</groupId>
<artifactId>jakarta.faces-api</artifactId>
<version>4.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
</plugin>
</plugins>
</build>
</project>这是我的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_5_0.xsd"
version="5.0">
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
</web-app>基于Jakarta.ee/规格/faces/3.0和Jakarta.ee/规格/faces/4.0,我可以使用jakarta.faces.webapp.FacesServlet类,那么为什么会出现错误呢?
我使用的是最新的Eclipse (版本: 2022-03 (4.23.0))和通配符-26.1.0.Final。
发布于 2022-06-01 15:57:37
根据WildFly下载页面,wildfly-26.1.0.Final是而不是是Jakarta 9服务器,更不用说Jakarta 10服务器了。这是雅加达EE 8服务器。

Jakarta 8依次提供了JSF 2.3 (和Servlet 4.0)。这意味着您应该使用javax.faces.*包,faces-config.xml应该符合JSF2.3,web.xml应该符合Servlet4.0。
您很可能打算选择上面部分提供的wildfly-preview-26.1.0.Final下载链接,具体标记为Preview。这个服务器是Jakarta 9服务器,它是第一个带有Jakartified名称的服务器(即jakarta.*而不是javax.*),并附带了JSF3.0 (和Servlet5.0)。Jakarta 10的实现将由即将推出的WildFly 27.x提供,目前仍处于Alpha阶段。它将提供面4.0 (和Servlet6.0)。
也就是说,对于成熟的Jakarta服务器来说,您的pom.xml是不正确的。您永远不应该手动发送松散的Jakarta工件,比如JSF和webapp。您应该将整个Jakarta依赖项声明为provided,而不是将单独的JSF依赖项声明为包含在WAR中的物理JAR文件。以下是雅加达EE 8:
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-api</artifactId>
<version>8.0.0</version>
<scope>provided</scope>
</dependency>在pom.xml中,这确实是您所需要的。
另请参阅:
https://stackoverflow.com/questions/72456700
复制相似问题