首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未能定义类jakarta.faces.webapp.FacesServlet

未能定义类jakarta.faces.webapp.FacesServlet
EN

Stack Overflow用户
提问于 2022-06-01 05:13:24
回答 1查看 641关注 0票数 2

当我想启动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文件中):

代码语言:javascript
复制
<servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class>

代码语言:javascript
复制
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>

错误消失了。

我在jakarta.faces-api依赖项的4.0.0版本和3.0.0中都尝试过这种方法:

代码语言:javascript
复制
<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文件:

代码语言:javascript
复制
<?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.0Jakarta.ee/规格/faces/4.0,我可以使用jakarta.faces.webapp.FacesServlet类,那么为什么会出现错误呢?

我使用的是最新的Eclipse (版本: 2022-03 (4.23.0))和通配符-26.1.0.Final。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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:

代码语言:javascript
复制
<dependency>
    <groupId>jakarta.platform</groupId>
    <artifactId>jakarta.jakartaee-api</artifactId>
    <version>8.0.0</version>
    <scope>provided</scope>
</dependency>

pom.xml中,这确实是您所需要的。

另请参阅:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72456700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档