根据环境激活配置文件

时间:2013-01-17 18:30:27

标签: maven

这是我的情景:

  • Maven 2.0.9是我们的构建系统
  • 我们将代码安装到多个环境
  • 我们所有特定于环境的属性都包含在属性文件中,每个环境都有一个属性文件
    • 我们目前使用properties-maven-plugin将这些属性读入maven;这个子弹不是必需的,只是我们当前的解决方案

目标:

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

到目前为止我尝试过:

  • Maven允许将插件执行放在pom配置文件中,这可以通过属性激活;不幸的是these must be system properties - 即。来自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?

1 个答案:

答案 0 :(得分:2)

仅使用Maven是不可能的。 (另请参阅How to activate profile by means of maven property?)原因是profiles are the first thing evaluated before anything else to determine the effective POM

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

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

如果没有修复属性文件,您只需要在脚本中添加一些东西来发现位置(假设它是可发现的)。