【发布时间】:2018-11-18 13:13:59
【问题描述】:
我们使用 Maven 构建我们的 java 项目,具有不同的配置文件(测试、暂存、生产等)。每个配置文件都有自己的过滤器,声明如下:
<filters>
<filter>src/main/filters/filter-${env}.properties</filter>
</filters>
(将 ${env} 设置为配置文件名称)。每个过滤器都包含特定于目标环境的值(主要是配置参数)。
多年来一直运行良好。但是,有时,我们希望覆盖此 .properties 过滤器文件中的某个值,而不修改文件本身。
为什么?因为它发生在过程的后期。我们已经在 SCM 上标记了一个版本,在测试/暂存环境中对其进行了仔细测试,在此版本号上进行了沟通,并且在生产中安装时发现生产过滤器中的参数值错误。来不及再新建一个tag再测试,只为一个配置参数。
我想找到一种在 Maven 运行时覆盖该值的方法:使用环境变量,或者通过在 Maven 命令行上传递一些参数。
我想应该可以通过我们自己扩展 maven-resources-plugin,但可能有更简单的方法?
注意:我们的构建不仅会生成战争,还会生成一个完整的包,包括其配置。
技术环境:Maven 3.3.9,由 Jenkins 作业启动
【问题讨论】:
-
你可以使用
mvn install "-Dthe.property=the.overriden.value" -
该死,我用 -DEnv.the.property 测试过,但没有用 -Dthe.property 测试过……它确实有效!我很惭愧我自己没有找到那个。
标签: maven environment-variables maven-3 maven-resources-plugin