无法定义 class jakarta.faces.webapp.FacesServlet
Failed to define class jakarta.faces.webapp.FacesServlet
我想启动 Wildfly 服务器时出现以下错误:
09:26:10,548 WARN [org.jboss.modules.define] (MSC service thread 1-1)
Failed to define class jakarta.faces.webapp.FacesServlet in Module
"deployment.demo-0.0.1-SNAPSHOT.war" from Service Module Loader:
java.lang.NoClassDefFoundError: Failed to link...
但是在我改变之后(在web.xml文件中):
<servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class>
至
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
错误消失了。
我已经在 4.0.0 和 3.0.0 版本 jakarta.faces 上都试过了]-api依赖:
<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/specifications/faces/3.0 and jakarta.ee/specifications/faces/4.0我可以使用jakarta.faces.webapp.FacesServlet class,为什么我会收到错误?
我正在使用最新的 Eclipse(版本:2022-03 (4.23.0)) 和 wildfly-26.1.0.Final.
根据 WildFly download page,wildfly-26.1.0.Final
不是 Jakarta EE 9 服务器,更不用说 Jakarta EE 10 服务器了。这是一个 Jakarta EE 8 服务器。
Jakarta EE 8 随附 JSF 2.3(和 Servlet 4.0)。然后您应该遵循 JSF 2.3 specification (and Servlet 4.0 specification).
这意味着您应该使用 javax.faces.*
包,faces-config.xml
应该符合 JSF 2.3,web.xml
应该符合 Servlet 4.0。
您很可能打算选择上面部分提供的 wildfly-preview-26.1.0.Final
下载 link。这是一个 Jakarta EE 9 服务器,它是第一个具有 Jakartified 包名称(即 jakarta.*
而不是 javax.*
)的服务器,并随附 JSF 3.0 和 Servlet 5.0。
也就是说,您的 pom.xml
对于成熟的 Jakarta EE 服务器来说是不正确的。您永远不应该将松散的 Jakarta EE 工件(例如 JSF)与 Web 应用程序一起手动发送。您应该声明整个 provided
Jakarta EE 依赖项,而不是单独的 JSF 依赖项。下面一个是 Jakarta EE 8:
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-api</artifactId>
<version>8.0.0</version>
<scope>provided</scope>
</dependency>
这就是您在 pom.xml
中真正需要的全部。
另请参阅:
- How to properly install and configure JSF libraries via Maven?
- JSF 2.3 tutorial with WildFly and Eclipse
我想启动 Wildfly 服务器时出现以下错误:
09:26:10,548 WARN [org.jboss.modules.define] (MSC service thread 1-1) Failed to define class jakarta.faces.webapp.FacesServlet in Module "deployment.demo-0.0.1-SNAPSHOT.war" from Service Module Loader: java.lang.NoClassDefFoundError: Failed to link...
但是在我改变之后(在web.xml文件中):
<servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class>
至
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
错误消失了。
我已经在 4.0.0 和 3.0.0 版本 jakarta.faces 上都试过了]-api依赖:
<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/specifications/faces/3.0 and jakarta.ee/specifications/faces/4.0我可以使用jakarta.faces.webapp.FacesServlet class,为什么我会收到错误?
我正在使用最新的 Eclipse(版本:2022-03 (4.23.0)) 和 wildfly-26.1.0.Final.
根据 WildFly download page,wildfly-26.1.0.Final
不是 Jakarta EE 9 服务器,更不用说 Jakarta EE 10 服务器了。这是一个 Jakarta EE 8 服务器。
Jakarta EE 8 随附 JSF 2.3(和 Servlet 4.0)。然后您应该遵循 JSF 2.3 specification (and Servlet 4.0 specification).
这意味着您应该使用 javax.faces.*
包,faces-config.xml
应该符合 JSF 2.3,web.xml
应该符合 Servlet 4.0。
您很可能打算选择上面部分提供的 wildfly-preview-26.1.0.Final
下载 link。这是一个 Jakarta EE 9 服务器,它是第一个具有 Jakartified 包名称(即 jakarta.*
而不是 javax.*
)的服务器,并随附 JSF 3.0 和 Servlet 5.0。
也就是说,您的 pom.xml
对于成熟的 Jakarta EE 服务器来说是不正确的。您永远不应该将松散的 Jakarta EE 工件(例如 JSF)与 Web 应用程序一起手动发送。您应该声明整个 provided
Jakarta EE 依赖项,而不是单独的 JSF 依赖项。下面一个是 Jakarta EE 8:
<dependency>
<groupId>jakarta.platform</groupId>
<artifactId>jakarta.jakartaee-api</artifactId>
<version>8.0.0</version>
<scope>provided</scope>
</dependency>
这就是您在 pom.xml
中真正需要的全部。
另请参阅:
- How to properly install and configure JSF libraries via Maven?
- JSF 2.3 tutorial with WildFly and Eclipse