JBoss EAP 7.3运行PrimeFaces Ext11 monacoEditor报类未找到错误
JBoss EAP 7.3 下 PrimeFaces Extensions 11 MonacoEditor 实例化失败抛出 NoClassDefFoundError
在JBoss EAP 7.3环境中运行primefaces-extension 11的monacoEditor组件时触发运行时错误,组件无法正常实例化。
错误堆栈信息
Caused by: javax.faces.FacesException: Cant instantiate class: org.primefaces.extensions.component.monacoeditor.MonacoEditorInline. at com.sun.faces.application.ApplicationImpl.newThing(ApplicationImpl.java:1738) at com.sun.faces.application.ApplicationImpl.createComponentApplyAnnotations(ApplicationImpl.java:1893) ... 105 more Caused by: java.lang.NoClassDefFoundError: org/primefaces/extensions/model/monacoeditor/EditorOptions at org.primefaces.extensions.component.monacoeditor.MonacoEditorBase.<init>(MonacoEditorBase.java:57) at org.primefaces.extensions.component.monacoeditor.MonacoEditorInline.<init>(MonacoEditorInline.java:57) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at java.lang.Class.newInstance(Class.java:442)
现有依赖配置
<dependency> <groupId>org.primefaces.extensions</groupId> <artifactId>resources-monacoeditor</artifactId> <version>11.0.4</version> </dependency>
环境版本信息
- PrimeFaces:11
- PrimeFaces Extensions:11.0.4
- resources-monacoeditor:11.0.4
- Mojarra:2.1.28
- 应用服务器:JBoss EAP 7.3
已确认上述依赖版本匹配,仍抛出类找不到错误,需要定位诱因及修复方案。
问题根因
该错误与依赖版本匹配无关,核心诱因有两点:
- 引入的
resources-monacoeditor依赖仅包含Monaco编辑器的前端静态资源(JS脚本、CSS样式、国际化文件等),不包含任何后端Java实现类。报错缺失的org.primefaces.extensions.model.monacoeditor.EditorOptions类实际位于primefaces-extensions核心jar包中,如果核心依赖未被正确打包到部署包,或被错误设置为providedscope未随应用发布,就会触发类找不到错误。 - JBoss EAP 7.3采用模块化类加载机制,默认优先加载服务器内置模块的类,若未做类加载隔离配置,服务器内置的JSF模块类加载器无法访问Web应用
WEB-INF/lib目录下的第三方扩展类,同样会抛出该错误。
修复方案
1. 校验并修正核心依赖配置
首先确认primefaces-extensions核心依赖配置正确,使用默认compile scope(禁止设置为provided),确保jar包会被打包进部署包的WEB-INF/lib目录:
<!-- PrimeFaces Extensions 核心依赖,必须引入 --> <dependency> <groupId>org.primefaces.extensions</groupId> <artifactId>primefaces-extensions</artifactId> <version>11.0.4</version> </dependency> <!-- 原有静态资源依赖保留即可 --> <dependency> <groupId>org.primefaces.extensions</groupId> <artifactId>resources-monacoeditor</artifactId> <version>11.0.4</version> </dependency>
打包完成后解压生成的war/ear部署包,检查WEB-INF/lib目录:
- 确认存在
primefaces-extensions-11.0.4.jar文件 - 排除依赖冲突:确认目录下没有其他低版本的
primefaces-extensionsjar包,避免传递依赖引入的旧版本覆盖正确版本 - 可解压核心jar包,确认存在
org/primefaces/extensions/model/monacoeditor/EditorOptions.class文件
2. 配置JBoss类加载隔离
如果校验后依赖配置完全正确,就在Web应用的WEB-INF目录下新增jboss-deployment-structure.xml配置文件,排除服务器内置JSF模块的隐式依赖,优先加载应用自带的第三方jar包,避免模块化类加载冲突:
<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <exclusions> <!-- 排除服务器内置的JSF模块,避免类加载优先级冲突 --> <module name="javax.faces.api"/> <module name="com.sun.jsf-impl"/> </exclusions> </deployment> </jboss-deployment-structure>
额外兼容性提示
当前使用的Mojarra 2.1.28版本过低,PrimeFaces 11及对应版本的PrimeFaces Extensions最低要求JSF 2.2及以上版本,即使解决当前类找不到问题,后续也可能触发JSF API不兼容的报错,建议将Mojarra升级至2.3.x系列版本适配JBoss EAP 7.3运行环境。
内容的提问来源于stack exchange,提问作者Rocco N.
相关产品推荐
相关产品推荐

