Использование переменных окружения в POM.XML на Maven
Быстрый ответ
Чтобы обратиться к переменным окружения в файле pom.xml
, используйте конструкцию ${env.ИМЯ_ПЕРЕМЕННОЙ}
. Например, для использования переменной окружения JAVA_HOME
добавьте в файл следующий фрагмент:
<properties>
<javaHome>${env.JAVA_HOME}</javaHome>
</properties>
Таким образом, значение переменной окружения JAVA_HOME
будет присвоено свойству Maven.
Переменные окружения и воспроизводимость сборки
Важной особенностью использования переменных окружения при процессах CI/CD является стремление к воспроизводимости сборки. Рекомендуется документировать все необходимые переменные, а также определять для них значения по умолчанию:
<properties>
<!-- В случае, если JAVA_HOME не определена, устанавливаем значение по умолчанию -->
<javaHome>${env.JAVA_HOME:-/default/path/to/jdk}</javaHome>
</properties>
Так, при отсутствии указания JAVA_HOME
будет использован предустановленный путь.
Профили: настройка конфигураций проекта как профи
Профили Maven обеспечивают удобное управление конфигурациями для различных сред. Рассмотрим на примере:
<profiles>
<profile>
<id>production</id>
<properties>
<!-- Переменная окружения для производственной среды -->
<envConfig>${env.PROD_DB}</envConfig>
</properties>
</profile>
</profiles>
Для активации профиля следует воспользоваться командной строкой:
mvn clean install -Pproduction
Возможные проблемы? Защитите свои настройки
Перед публикацией кода удостоверьтесь, что все необходимые переменные окружения определены:
#!/bin/bash
# Проверяем наличие JAVA_HOME
: ${JAVA_HOME:? "ОШИБКА: JAVA_HOME не определена."}
# Запускаем Maven
mvn clean install
Эта сборка будет прервана, если переменная JAVA_HOME
отсутствует, предотвращая тем самым возможные ошибки.
Визуализация
Взаимоотношение между POM.xml
и переменными окружения можно представить аналогией с DJ-пультом:
🎧 DJ Пульт Управления: POM.xml
Вы можете переключить POM.xml
на использование других переменных окружения:
<properties>
<envVar>${env.ВАША_ПЕРЕМЕННАЯ}</envVar>
</properties>
Как и при настройке DJ-сета, вы регулируете поведение проекта с помощью переменных окружения в Maven.
Конфигурирование плагинов и использование переменных окружения: эффективный дуэт
Настройка плагинов может происходить через переменные окружения. Рассмотрим на примере maven-replacer-plugin
:
<plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>maven-replacer-plugin</artifactId>
<version>1.5.3</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>replace</goal>
</goals>
<configuration>
<!-- Процесс подстановки токенов -->
<file>${project.build.directory}/config/app.properties</file>
<token>@envVar@</token>
<value>${env.ENV_VARIABLE}</value>
</configuration>
</execution>
</executions>
</plugin>
В данном случае @envVar@
в файле app.properties
заменяется на значение переменной окружения ENV_VARIABLE
.
Регистрозависимость и проверка совместимости: позаботьтесь о деталях
Переменные окружения обычно пишутся большими буквами, следите за правильностью обращений:
<buildNumber>${env.BUILD_NUMBER}</buildNumber>
Также не забывайте проверять совместимость обращения к переменных окружения в вашей версии Maven.
Продвинутые методы подстановки
В некоторых ситуациях вам может потребоваться более сложная подстановка, где на помощь придут скрипты:
source ./maven_script.sh
mvn -Dproperty.file=env.properties clean install
Сначала выполняется скрипт maven_script.sh
, устанавливающий начальные переменные окружения, а затем эти переменные передаются в процесс сборки Maven.
Полезные материалы
- Maven – Введение в профили сборки — раскрывает использование переменных окружения в профилях Maven.
- Плагин ресурсов Apache Maven – Фильтрация — демонстрирует фильтры для внедрения переменных окружения в сборки Maven.
- Основные возможности — описание подхода Spring Boot к конфигурации с применением переменных окружения.
- Just a moment... — объясняет разницу между
System.getProperty()
иSystem.getenv()
. - Just a moment... — знакомит с основам работы со свойствами Maven, их установкой и фильтрацией.