You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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模块:
      1. 在modules/system/layers/base/[自定义组名]/main路径下创建目录(例如com/yourbiz/service/main)。
      2. 将主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>
        
      3. 在每个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>
      

方案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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:41:13