1

这是我的场景:

  • Maven 2.0.9 是我们的构建系统
  • 我们将代码安装到多个环境
  • 我们所有特定于环境的属性都包含在属性文件中,每个环境一个

目标:

  • 仅针对某些环境执行构建的某些部分(即插件执行)
  • 通过在特定于环境的属性文件中设置值来控制运行哪些部件

到目前为止我已经尝试过:

  • Maven 允许将插件执行放在 pom 配置文件中,可以通过属性激活;不幸的是,这些必须是系统属性- 即。来自 settings.xml 或命令行,而不是来自properties-maven-plugin

如果可能,我们希望将所有内容都封装在构建工作区中,如下所示:

project
    pom.xml
    src
       ...
    conf
       dev.properties
       test.properties
       prod.properties
    build-scripts
       build.groovy <-- the script that wraps maven to do the build
       install.groovy <-- ... wraps maven to do the install

运行构建看起来像:

cd build-scripts
./build.groovy
./install.groovy -e prod

有没有可能用我们正在使用的 maven 版本来实现这些目标?如果没有,是否可以使用更新版本的 Maven?

4

1 回答 1

2

仅使用 Maven 是不可能的。(另请参阅如何通过 maven 属性激活配置文件?)原因是配置文件是在确定有效 POM 之前评估的第一件事

我的建议是编写一些预处理器,在启动 Maven 之前解析特定于环境的属性文件并将它们转换为所需的系统属性。此脚本可以包含在您的~/.mavenrc文件中,以便在启动 Maven 之前自动运行。这是一个示例脚本,它假定属性文件位于固定位置:

properties=`cat /etc/build-env.properties`
while read line; do
   MAVEN_OPTS="$MAVEN_OPTS -D$line"
done <<< "$properties"

如果属性文件不固定,您只需在脚本中添加一些内容即可发现该位置(假设它是可发现的)。

于 2013-01-17T19:08:19.440 回答