首页 > 解决方案 > 使用命令行中的属性进行资源过滤

问题描述

我正在使用 maven 并希望通过使用资源过滤将一些 maven 属性写入属性文件。
除非我尝试从命令行覆盖某些属性,否则这似乎工作正常。

例如,在下面的示例中,我application-type在 pom.xml 中将属性设置为 MIXED,但我想从命令行用 BATCH 覆盖它。即使我提供如下属性,过滤仍会将 MIXED 写入我的属性文件:-Dapplication-type=BATCH

如何将通过命令行参数提供的属性值写入属性文件?

项目结构:

.
|-- pom.xml
`-- src
    `-- main
        `-- resources
            `-- application.properties

pom.xml(无关部分省略):

<properties>
        <!-- ApplicationType should be provided via maven parameter. Allowed values: MIXED, DIALOG, BATCH -->
        <application-type>MIXED</application-type>
</properties>

<build>
        <sourceDirectory>src/main/java</sourceDirectory>
        <testSourceDirectory>src/test/java</testSourceDirectory>
        <finalName>${project.artifactId}</finalName>

        <!-- Apply filtering to write maven properties into properties file -->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>

        <!-- ... -->        
</build>

应用程序属性:

application-type=${application-type}

我这样称呼它:
mvn clean process-resources -Dapplication-type=BATCH

然而,生成的 application.properties(在 target/classes/application.properties 中)包含:
application-type=MIXED
而不是预期的
application-type=BATCH

标签: maven

解决方案


推荐阅读