Использовать свойство из командной строки для фильтрации ресурсов

#maven

#maven

Вопрос:

Я использую maven и хочу записать некоторые свойства maven в файл свойств с помощью фильтрации ресурсов.
Кажется, что это работает нормально, если я не попытаюсь перезаписать определенные свойства из командной строки.

Например, в примере ниже я установил для свойства application-type значение MIXED в pom.xml но я хочу перезаписать его с помощью пакета из командной строки. Фильтрация по-прежнему записывает 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.properties:

 application-type=${application-type}
  

и я называю это так:
mvn clean process-resources -Dapplication-type=BATCH

Однако результирующий application.properties (в target/ classes/application.properties) содержит:
application-type=MIXED
вместо ожидаемого
application-type=BATCH

Комментарии:

1. Я рекомендую сначала удалить <sourceDirectory>src/main/java</sourceDirectory> , <testSourceDirectory>src/test/java</testSourceDirectory> а также <finalName>${project.artifactId}</finalName> … Кроме того, является ли это приложением Spring boot?

2. Нет, это не приложение Spring boot.

3. Я удалю <sourceDirectory>src/main/java</sourceDirectory> , <testSourceDirectory>src/test/java</testSourceDirectory> и <finalName>${project.artifactId}</finalName> и посмотрю, все ли по-прежнему работает нормально. Я даже не уверен, почему это здесь.

4. Является ли это приложением Spring boot?