Maven 在多模块项目中构建配置文件 属性 展开
Maven build profiles in a mutli-module project property expansion
我有一个多模块 Maven 项目。我的父 POM 具有以下模块:
<module>common</module>
<module>ingest</module>
<module>package</module>
package
模块处理使用 maven-antrun-plugin
构建可部署 zip 文件的所有方面。其他两个模块是核心应用程序代码所在的位置。在 package
中,我有各种配置文件,用于保存生产、暂存和开发环境的配置设置。每个配置文件如下所示:
<profile>
<id>prod</id>
<properties>
<oozie.url>http://oozie-server:11000/oozie</oozie.url>
<stage.user>prod-stage</stage.user>
</properties>
</profile>
这在父级别上非常有效,运行:
mvn clean install -P prod
所有 .properties 文件都有各种属性扩展为 Maven 配置文件中的属性。
在 ingest
模块中,一个 class 可能依赖于带有 ingest
模块的 .properties 文件。此属性文件的内容类似于:
stageUser=${stage.user}
当 运行 测试 ingest
模块时,属性不会扩展为构建配置文件中的属性,例如属性 仍然是 stageUser=${stage.user}
而不是 stageUser=prod-stage
。这会导致测试失败。
我唯一的解决方法是添加所需的配置文件和属性以使测试传递到 ingest
POM。这意味着我在 package
和 ingest
模块的两个位置都有这些属性。对此有更好的解决方案吗?
从父级继承属性应该可行。确保在子模块中有 parent
声明:
<parent>
<artifactId>parent</artifactId>
<groupId>parentGroupId</groupId>
<version>version</version>
</parent>
我有一个多模块 Maven 项目。我的父 POM 具有以下模块:
<module>common</module>
<module>ingest</module>
<module>package</module>
package
模块处理使用 maven-antrun-plugin
构建可部署 zip 文件的所有方面。其他两个模块是核心应用程序代码所在的位置。在 package
中,我有各种配置文件,用于保存生产、暂存和开发环境的配置设置。每个配置文件如下所示:
<profile>
<id>prod</id>
<properties>
<oozie.url>http://oozie-server:11000/oozie</oozie.url>
<stage.user>prod-stage</stage.user>
</properties>
</profile>
这在父级别上非常有效,运行:
mvn clean install -P prod
所有 .properties 文件都有各种属性扩展为 Maven 配置文件中的属性。
在 ingest
模块中,一个 class 可能依赖于带有 ingest
模块的 .properties 文件。此属性文件的内容类似于:
stageUser=${stage.user}
当 运行 测试 ingest
模块时,属性不会扩展为构建配置文件中的属性,例如属性 仍然是 stageUser=${stage.user}
而不是 stageUser=prod-stage
。这会导致测试失败。
我唯一的解决方法是添加所需的配置文件和属性以使测试传递到 ingest
POM。这意味着我在 package
和 ingest
模块的两个位置都有这些属性。对此有更好的解决方案吗?
从父级继承属性应该可行。确保在子模块中有 parent
声明:
<parent>
<artifactId>parent</artifactId>
<groupId>parentGroupId</groupId>
<version>version</version>
</parent>