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

如何用Maven自动生成jboss-deployment-structure.xml文件?

自动生成jboss-deployment-structure.xml的Maven方案

方案一:资源过滤+模板文件

这是最轻量化的解决方案,借助Maven资源过滤自动同步版本号:

  1. 将原jboss-deployment-structure.xml重命名为jboss-deployment-structure.xml.template,放到src/main/resources目录,把固定版本号替换为Maven属性变量:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <!-- Make sub deployments isolated by default, so they cannot see each others 
        classes without a Class-Path entry -->
    <ear-subdeployments-isolated>true</ear-subdeployments-isolated>
    <deployment>
        <resources>
            <resource-root path="lib/apache/commons-lang3-${commons-lang3.version}.jar" />
            <resource-root path="lib/joda/joda-time-${joda-time.version}.jar" />
        </resources>
    </deployment>
</jboss-deployment-structure>
  1. 在pom.xml的<properties>块中定义对应版本属性:
<properties>
    <commons-lang3.version>3.3.2</commons-lang3.version>
    <joda-time.version>2.0</joda-time.version>
</properties>
  1. 配置资源过滤规则,让Maven在构建时替换模板变量并生成目标文件:
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <includes>
                <include>jboss-deployment-structure.xml.template</include>
            </includes>
            <targetPath>${project.build.directory}/application/META-INF</targetPath>
            <destFileName>jboss-deployment-structure.xml</destFileName>
        </resource>
    </resources>
</build>

后续只需修改pom中的版本属性,构建时就会自动同步到生成的描述文件里。

方案二:Maven AntRun插件动态生成

如果需要自动扫描lib目录下的所有Jar包(无需手动维护每个资源节点),可以用AntRun插件调用Ant任务实现:
在pom.xml中添加插件配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>3.1.0</version>
            <executions>
                <execution>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <tasks>
                            <!-- 写入XML头部内容 -->
                            <echo file="${project.build.directory}/application/META-INF/jboss-deployment-structure.xml">
                                <?xml version="1.0" encoding="UTF-8"?>
                                <jboss-deployment-structure>
                                    <ear-subdeployments-isolated>true</ear-subdeployments-isolated>
                                    <deployment>
                                        <resources>
                            </echo>
                            <!-- 扫描构建目录下的lib文件夹 -->
                            <fileset dir="${project.build.directory}/lib" id="libFiles">
                                <include name="**/*.jar"/>
                            </fileset>
                            <!-- 将Jar路径转换为resource-root节点格式 -->
                            <pathconvert pathsep="&#10;" property="resourceRoots" refid="libFiles">
                                <mapper>
                                    <chainedmapper>
                                        <globmapper from="*/*.jar" to="&lt;resource-root path=&quot;lib/*/*.jar&quot; /&gt;" />
                                        <globmapper from="*.jar" to="&lt;resource-root path=&quot;lib/*.jar&quot; /&gt;" />
                                    </chainedmapper>
                                </mapper>
                            </pathconvert>
                            <!-- 写入资源节点和XML尾部 -->
                            <echo file="${project.build.directory}/application/META-INF/jboss-deployment-structure.xml" append="true">
                                        ${resourceRoots}
                                        </resources>
                                    </deployment>
                                </jboss-deployment-structure>
                            </echo>
                        </tasks>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

这个配置会在构建时自动扫描target/lib下的所有Jar包,生成对应的<resource-root>节点,完全无需手动维护资源列表。

方案三:自定义Maven插件(进阶)

如果前两种方案无法满足定制需求,可以自行开发简单的Maven插件:读取pom中的依赖信息,按照jboss-deployment-structure的XML格式生成文件。这种方式灵活性最高,但需要具备基础的Java和Maven插件开发能力。

内容的提问来源于stack exchange,提问作者peterremec

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:17:46