我正在将一个 Web 应用程序从 Payara Server 4(使用 Java 8)迁移到 Payara Community 版本 6(使用 Java 11)上运行。
当我部署使用 RichFaces 的 Web 应用程序时,出现以下错误:
部署期间出现严重错误:NoClassDefFoundError:javax/faces/FacesWrapper:
这是应用程序使用的 RichFaces 的依赖项引用:
<dependency>
<groupId>org.richfaces</groupId>
<artifactId>richfaces</artifactId>
<version>4.5.17.Final</version>
</dependency>
当我将此 Web 应用程序部署到旧的 Payara 4 服务器时,不会发生这种情况。
更糟糕的是 https://richfaces.jboss.org/ RichFaces 已于 2016 年 6 月结束生命。
自从看到这个问题后,我了解到应该使用 PrimeFaces,所以当我删除 RichFaces 并使用 PrimeFaces 并尝试部署时,我收到了这个新错误: LifecycleException:IllegalArgumentException:NoClassDefFoundError:javax / servlet / ServletRequestListener:
仅供参考,这里是对 PrimeFaces 依赖项的 pom.xml 引用:
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>13.0.4</version>
</dependency>
有人遇到过类似的问题吗?如果是这样,你是如何解决的?
Payara 6 是 Jakarta EE10,因此您需要使用 Jakarta 版本的 jar,这就是发生错误
NoClassDefFoundError: javax/faces/FacesWrapper
的原因。要使用 PrimeFaces Jakarta,请执行以下操作...
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>13.0.4</version>
<classifier>jakarta</classifier>
</dependency>
我不知道 RichFaces 是否有雅加达版本。您可以检查这个分支,它使 RichFaces 保持最新状态:https://github.com/albfernandez/richfaces
您可能还想阅读这篇有关迁移到 Jakarta EE10 的博客文章:https://www.melloware.com/java-ee-6-8-to-jakarta-ee-10-upgrade/