Payara 6(Java 11)迁移时RichFaces/PrimeFaces异常求助
迁移至Payara Community 6的问题解决
RichFaces部署错误:NoClassDefFoundError: javax/faces/FacesWrapper
RichFaces 4.5.17.Final基于Java EE 7开发,依赖旧的javax.faces命名空间API,但Payara Community 6遵循Jakarta EE 9规范,已将所有Java EE API的命名空间从javax替换为jakarta(比如javax.faces.FacesWrapper现在是jakarta.faces.FacesWrapper)。加上RichFaces早在2016年就停止维护,完全没有适配Jakarta EE的版本,这个问题没法通过小修改解决,直接放弃RichFaces、转用PrimeFaces这类仍在维护且支持Jakarta EE的组件库是唯一可行方案。
PrimeFaces部署错误:NoClassDefFoundError: javax/servlet/ServletRequestListener
这个错误同样源于Java EE到Jakarta EE的命名空间变更,javax.servlet.ServletRequestListener已被替换为jakarta.servlet.ServletRequestListener,解决步骤如下:
- 调整项目依赖:将所有旧的Java EE依赖(比如
javax.servlet-api、javax.faces-api)替换为Jakarta EE版本,并且设置为provided范围(Payara 6自带这些API,避免打包冲突)。示例配置:<dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>5.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>jakarta.faces</groupId> <artifactId>jakarta.faces-api</artifactId> <version>3.0.0</version> <scope>provided</scope> </dependency> - 更新配置文件命名空间:将
web.xml、faces-config.xml等配置文件的命名空间从Java EE的http://xmlns.jcp.org/xml/ns/javaee替换为Jakarta EE的http://xmlns.jcp.org/xml/ns/jakartaee,同时更新版本号(比如web.xml对应version="4.0")。 - 替换代码中的API引用:全局替换项目代码里的
javax.servlet、javax.faces等旧包名为jakarta.servlet、jakarta.faces。 - 排查冲突依赖:检查项目中是否有其他第三方库仍在使用旧的
javax命名空间API,比如老旧的工具类、拦截器,替换或升级这些依赖到Jakarta兼容版本。
内容的提问来源于stack exchange,提问作者CAMD_3441
相关产品推荐
相关产品推荐

