我目前正在将一些 Java 项目迁移到 Maven 结构,但遇到了问题。旧的 EAR 项目包含
jboss-deployment-structure.xml
,因此我已将其移至 <EAR-ROOT>/src/main/application/META-INF
下的 Maven 项目。当我构建一个项目时,描述符被正确地放置在 EAR 文件中,但由于它是 Maven 项目,我正在考虑使用 Maven 生成 jboss-deployment-structure.xml
,因为它包含许多对 jar 库的引用。现在当我例如在pom.xml
中更改一些Java库版本,我还必须在jboss-deployment-structure.xml
中手动更改它。
我的
jboss-deployment-structure.xml
的一部分:
<?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-3.3.2.jar" />
<resource-root path="lib/joda/joda-time-2.0.jar" />
</resources>
</deployment>
</jboss-deployment-structure>
所以我的问题 - 是否可以使用 Maven 生成
jboss-deployment-structure.xml
?我已经搜索过一些合适的插件,但没有找到。描述符可以通过其他方式生成吗?
提前致谢。
自动生成 jboss-deployment-struct.xml 的一种方法是使用 Maven 资源过滤功能,该功能允许您在构建过程中将资源文件中的占位符替换为 Maven 属性中的相应值。
您首先需要在 jboss-deployment-struct.xml 中包含库版本的占位符,如下所示:
<?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.lang.version}.jar" />
<resource-root path="lib/joda/joda-time-${joda.time.version}.jar" />
</resources>
</deployment>
</jboss-deployment-structure>
接下来,您将在 pom.xml 中定义这些占位符:
<properties>
<commons.lang.version>3.3.2</commons.lang.version>
<joda.time.version>2.0</joda.time.version>
</properties>
最后,您需要配置项目以使用 Maven 资源过滤。您可以通过将 resources 元素添加到 pom.xml 中的构建配置来完成此操作:
<build>
<resources>
<resource>
<directory>src/main/application/META-INF</directory>
<filtering>true</filtering>
</resource>
</resources>
...
</build>
此设置将在构建项目时将 jboss-deployment-struct.xml 中的占位符替换为 Maven 属性中的相应值。
每当更改库的版本时,请记住更新 pom.xml 文件的属性部分中的版本号,并且 jboss-deployment-struct.xml 将在构建过程中自动更新。