WildFly 29(Java 17)中SAR文件部署问题求助
解决WildFly 29(Java 17)中SAR文件部署问题的方案
1. 明确WildFly与旧JBoss AS的SAR部署差异
JBoss AS 4.2.3会自动扫描并部署JAR包内嵌套的SAR文件,但WildFly 29默认不支持嵌套SAR的自动部署,仅识别standalone/deployment目录下的顶级部署单元;同时WildFly对类加载的规则更严格,这也是单独部署SAR时出现类缺失的核心原因。
2. 两种可行的部署方案
方案A:提取SAR为独立部署并配置依赖
如果需要单独部署SAR,需确保SAR能访问到依赖类:
- 步骤1:将原JAR中的所有SAR文件提取至
standalone/deployment目录。 - 步骤2:处理类依赖问题:
- 若依赖类在原主JAR中,将主JAR部署为WildFly模块:
- 在
modules/system/layers/base/[自定义组名]/main路径下创建目录(例如com/yourbiz/service/main)。 - 将主JAR放入该目录,同时创建
module.xml文件:<?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.9" name="com.yourbiz.service"> <resources> <resource-root path="your-main.jar"/> </resources> <dependencies> <!-- 添加主JAR依赖的基础模块,按需调整 --> <module name="javax.api"/> <module name="org.jboss.logging"/> </dependencies> </module> - 在每个SAR的
META-INF目录下添加jboss-deployment-structure.xml,声明对上述模块的依赖:<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <dependencies> <module name="com.yourbiz.service" export="true"/> </dependencies> </deployment> </jboss-deployment-structure>
- 在
- 或者将主JAR与SAR打包为EAR,通过
application.xml共享类加载器:<application xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="7"> <module> <ejb>your-main.jar</ejb> </module> <module> <ejb>your-service.sar</ejb> </module> </application>
- 若依赖类在原主JAR中,将主JAR部署为WildFly模块:
方案B:配置主JAR触发嵌套SAR部署
通过jboss-all.xml让WildFly识别并部署主JAR内的嵌套SAR:
- 在原主JAR的
META-INF目录下创建jboss-all.xml:<jboss xmlns="urn:jboss:1.0"> <jboss-deployment-dependencies xmlns="urn:jboss:deployment-dependencies:1.0"> <dependency name="your-service1.sar" export="true"/> <dependency name="your-service2.sar" export="true"/> </jboss-deployment-dependencies> <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2"> <deployment> <sub-deployment name="your-service1.sar"> <dependencies> <module name="deployment.your-main.jar"/> </dependencies> </sub-deployment> <sub-deployment name="your-service2.sar"> <dependencies> <module name="deployment.your-main.jar"/> </dependencies> </sub-deployment> </deployment> </jboss-deployment-structure> </jboss> - 将主JAR放入
standalone/deployment目录,WildFly会自动扫描并部署其中的SAR子单元,同时保证SAR能访问主JAR的类。
3. 部署验证注意事项
- 查看
standalone/log/server.log中的类缺失日志,明确缺失类所属的JAR,确保该JAR被正确加入依赖。 - 适配Java 17:检查SAR代码是否使用了已移除/废弃的JDK API(如部分
javax.*API需替换为jakarta.*,若使用Jakarta EE 10规范)。 - 核对SAR中
*-service.xml配置的类名,避免拼写错误或类路径配置问题。
内容的提问来源于stack exchange,提问作者Shipra Shahi
相关产品推荐
相关产品推荐

