如何在JBoss中配置manifold-ext,解决部署时ClassNotFoundException问题
JBoss部署Manifold插件类缺失问题解决方案
问题结论
该ClassNotFoundException确实需要通过创建JBoss自定义Manifold模块解决,因为JBoss的模块化类加载机制默认不会加载项目依赖中未显式声明的运行时类,Manifold的rt运行时包需要作为全局模块供部署的项目调用。
配置步骤
1. 准备依赖包
从Maven仓库下载与你项目编译时使用的完全相同版本的manifold-rtJar包。
2. 创建模块目录结构
进入JBoss安装根目录,按以下层级创建文件夹:
${JBOSS_HOME}/modules/system/layers/base/manifold/rt/main/
3. 编写模块配置文件
在上述main目录下新建module.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.1" name="manifold.rt"> <resources> <!-- 替换为你实际使用的manifold-rt包名 --> <resource-root path="manifold-rt-2023.1.30.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="jdk.unsupported"/> </dependencies> </module>
4. 放置Jar包
将提前下载好的manifold-rtJar包放入main目录,与module.xml文件同级。
5. 项目声明模块依赖
在你部署的War包的WEB-INF目录下新建jboss-deployment-structure.xml配置文件,声明对刚创建的Manifold模块的依赖:
<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <dependencies> <module name="manifold.rt" export="true"/> </dependencies> </deployment> </jboss-deployment-structure>
注意事项
- 必须保证
manifold-rt的版本与项目编译阶段使用的Manifold编译器插件版本完全一致,避免版本不兼容导致的其他异常 - 若项目使用了Manifold的扩展能力(如JSON、SQL、YAML支持),可将对应的
manifold-json、manifold-sql等Jar包也添加到当前模块的resources节点下,或按照相同规则创建独立模块并在项目配置中声明依赖
内容的提问来源于stack exchange,提问作者dknipper
相关产品推荐
相关产品推荐

