如何用Maven自动生成jboss-deployment-structure.xml文件?
自动生成jboss-deployment-structure.xml的Maven方案
方案一:资源过滤+模板文件
这是最轻量化的解决方案,借助Maven资源过滤自动同步版本号:
- 将原
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>
- 在pom.xml的
<properties>块中定义对应版本属性:
<properties> <commons-lang3.version>3.3.2</commons-lang3.version> <joda-time.version>2.0</joda-time.version> </properties>
- 配置资源过滤规则,让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=" " property="resourceRoots" refid="libFiles"> <mapper> <chainedmapper> <globmapper from="*/*.jar" to="<resource-root path="lib/*/*.jar" />" /> <globmapper from="*.jar" to="<resource-root path="lib/*.jar" />" /> </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
相关产品推荐
相关产品推荐

