使用环境变量或命令行参数覆盖Maven过滤器值

时间:2018-06-08 13:02:36

标签: maven environment-variables maven-3 maven-resources-plugin

我们使用Maven构建我们的java项目,具有不同的配置文件(测试,登台,制作等)。每个配置文件都有自己的过滤器,声明如下:

<filters>
    <filter>src/main/filters/filter-${env}.properties</filter>
</filters>

(将$ {env}设置为配置文件名称)。每个过滤器都包含特定于目标环境的值(主要是配置参数)。

它已经很好地工作了很多年。但是,有时,我们希望覆盖此.properties过滤器文件中的一个值,而不修改文件本身

为什么呢?因为它在这个过程中很晚才发生。我们已经在SCM上标记了一个版本,在测试/暂存环境中对其进行了仔细测试,在此版本号上进行了通信,并且在生产中安装时在生产过滤器中发现了错误的参数值。创建新标签并再次测试为时已晚,仅适用于配置参数。

我想找到一种方法来覆盖Maven运行时的值:使用环境变量,或者在Maven命令行上传递一些参数。

我认为应该可以通过自己扩展maven-resources-plugin来实现,但可能有更简单的方法吗?

注意:我们的构建不仅会产生战争,还会产生一个完整的包,包括其配置。

技术环境:Maven 3.3.9,由Jenkins工作启动

1 个答案:

答案 0 :(得分:2)

执行maven命令时,您可以通过将其作为系统属性提供来覆盖您的属性。

喜欢mvn install "-Dthe.property=the overriden value"

注意&#34;仅当值包含空格时才需要。