迁移至PrimeFaces 12、Sapphire 5.1及WildFly 28时的javax.faces适配问题
解决PrimeFaces 12在WildFly 28下的javax.faces迁移问题
核心原因
PrimeFaces 12提供了两个分支版本:
- 标准版本:基于Java EE(使用
javax.*包) - Jakarta EE版本:基于Jakarta EE(使用
jakarta.*包)
你当前使用的是标准版本的PrimeFaces 12,所以Jar包内仍保留javax.faces.*的导入,与WildFly 28的Jakarta EE环境不兼容。
解决方案步骤
1. 替换PrimeFaces依赖为Jakarta版本
在Maven的pom.xml中,将原PrimeFaces依赖替换为带jakarta classifier的版本:
<dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>12.0.0</version> <!-- 指定Jakarta EE分支 --> <classifier>jakarta</classifier> </dependency>
这个版本的Jar包内部所有javax.faces.*导入已替换为jakarta.faces.*,完全适配WildFly 28的环境。
2. 确认Sapphire模板的Jakarta兼容性
Sapphire 5.1同样需要使用Jakarta版本的包,替换对应的依赖:
<dependency> <groupId>org.primefaces.themes</groupId> <artifactId>sapphire</artifactId> <version>5.1</version> <classifier>jakarta</classifier> </dependency>
如果该版本没有Jakarta classifier,需要升级到支持Jakarta的Sapphire版本(通常5.1及以上已提供Jakarta分支)。
3. 处理依赖冲突
WildFly 28自带Jakarta Faces 4.0 API,需确保Maven依赖中不会引入重复的JSF API:
- 在PrimeFaces依赖中排除
jakarta.faces-api(可选,避免与服务器自带API冲突):
<dependency> <groupId>org.primefaces</groupId> <artifactId>primefaces</artifactId> <version>12.0.0</version> <classifier>jakarta</classifier> <exclusions> <exclusion> <groupId>jakarta.faces</groupId> <artifactId>jakarta.faces-api</artifactId> </exclusion> </exclusions> </dependency>
4. 验证其他依赖
检查项目中其他JSF相关依赖(如OmniFaces、自定义组件库),确保它们均为Jakarta EE兼容版本:
- OmniFaces需使用4.x及以上版本
- 其他第三方库需替换为支持
jakarta.*包的版本
额外注意事项
- 清理Maven本地仓库:删除原标准版本的PrimeFaces Jar包,避免依赖混淆
- 重新构建项目:执行
mvn clean install确保所有依赖正确下载 - 检查WildFly部署配置:确认服务器未加载旧的Java EE相关模块
内容的提问来源于stack exchange,提问作者Alex Mi
相关产品推荐
相关产品推荐

