Я достиг чего-то похожего, но вместо переменных в файлах pom.xml
в файлах свойств. Поэтому в моих файлах свойств есть переменные, которые будут изменены Maven в упаковке.
Сначала я определил эти переменные в разделе профилей pom:
<profiles>
<profile>
<id>dev</id>
<activation><activeByDefault>true</activeByDefault></activation>
<properties>
<props.debug>true</props.debug>
<props.email>false</props.email>
<what.ever.you.want>value for dev profile</what.ever.you.want>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<props.debug>false</props.debug>
<props.email>true</props.email>
<what.ever.you.want>value for prod profile</what.ever.you.want>
</properties>
</profile>
</profiles>
Затем активировал maven обработку и фильтрацию ресурсов. Итак, в вашем разделе сборки:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
Наконец, я могу иметь "vars" в моих файлах свойств, файлах конфигурации.
Например, в моем проекте у меня есть файл email.properties
для настройки отправки электронных писем. Свойство «sendEmail» указывает, нужно ли мне отправлять письмо (профиль prod) или распечатывать его в отладке (профиль dev) При использовании dev profile эта переменная будет иметь значение false, тогда как при использовании профиля profile свойство будет иметь истинное значение.
sendEmail=${props.email}
Это работает не только с файлами свойств, но и с XML (я думаю, с каждым текстовым файлом)
Контрасы:
- Часть конфигурации разбросана по файлу pom
- Maven упаковка длится дольше (потому что фильтрация)
- Размещение переменных в XML-файлах делает их синтаксически ошибочными (потому что символ $)