1. Обзор
Профили Maven можно использовать для создания настраиваемых конфигураций сборки , например для определения уровня детализации тестирования или конкретной среды развертывания.
В этом уроке мы узнаем, как работать с профилями Maven.
2. Базовый пример
Обычно , когда мы запускаем пакет mvn,
модульные тесты также выполняются . Но что, если мы хотим быстро упаковать артефакт и запустить его , чтобы проверить, работает ли он?
Во- первых, мы создадим профиль без тестов , который устанавливает для свойства
maven.test.skip
значение true:
<profile>
<id>no-tests</id>
<properties>
<maven.test.skip>true</maven.test.skip>
</properties>
</profile>
Далее мы выполним профиль, запустив команду mvn package -Pno-tests
. Теперь артефакт создан и тесты пропущены. В этом случае команда mvn package -Dmaven.test.skip
была бы проще.
Однако это было только введение в профили Maven. Рассмотрим более сложные настройки.
3. Объявление профилей
В предыдущем разделе мы видели, как создать один профиль. Мы можем настроить столько профилей, сколько захотим , присвоив им уникальные идентификаторы.
Допустим, мы хотели создать профиль, который запускал бы только наши интеграционные тесты, а другой — для набора мутационных тестов.
Мы начнем с указания идентификатора
для каждого из них в нашем файле pom.xml
:
<profiles>
<profile>
<id>integration-tests</id>
</profile>
<profile>
<id>mutation-tests</id>
</profile>
</profiles>
В каждом элементе профиля
мы можем настроить множество элементов, таких как зависимости
, плагины
, ресурсы
, finalName
.
Итак, для приведенного выше примера мы могли бы добавить плагины и их зависимости отдельно для интеграционных
и мутационных тестов
.
Разделение тестов на профили может ускорить сборку по умолчанию, сосредоточив внимание, скажем, только на модульных тестах.
3.1. Область профиля
Теперь мы просто поместили эти профили в наш файл pom.xml
, который объявляет их только для нашего проекта.
Но в Maven 3 мы можем добавлять профили в любое из трех мест:
- Профили для конкретных проектов помещаются в файл проекта
pom.xml .
- Пользовательские профили помещаются в файл
settings.xml пользователя.
- Глобальные профили помещаются в глобальный файл
settings.xml
Обратите внимание, что Maven 2 поддерживал четвертое местоположение, но оно было удалено в Maven 3.
Мы пытаемся настроить профили в pom.xml,
когда это возможно. Причина в том, что мы хотим использовать профили как на наших машинах разработки, так и на машинах сборки. Использование файла settings.xml
более сложно и чревато ошибками, поскольку нам приходится самим распределять его по средам сборки.
4. Активация профилей
После того, как мы создадим один или несколько профилей , мы можем начать их использовать, или, другими словами, активировать
их.
4.1. Просмотр активных профилей
Давайте воспользуемся целью help:active-profiles
, чтобы увидеть, какие профили активны в нашей сборке по умолчанию:
mvn help:active-profiles
Собственно, так как мы еще ничего не активировали, то получаем:
The following profiles are active:
Ну ничего.
Мы активируем их через мгновение. Но быстро, еще один способ увидеть, что активировано, — это включить maven-help-plugin
в наш pom.xml
и связать цель активных профилей
с фазой компиляции :
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-help-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>show-profiles</id>
<phase>compile</phase>
<goals>
<goal>active-profiles</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Теперь приступим к их использованию! Мы рассмотрим несколько разных способов.
4.2. Использование -P
На самом деле, мы уже видели один способ в начале, который заключается в том, что мы можем активировать профили с аргументом -P
.
Итак, начнем с включения профиля Integration-Tests :
mvn package -P integration-tests
Если мы проверим активные профили с помощью maven-help-plugin
или команды mvn help:active-profiles -P Integration-tests
, мы получим следующий результат:
The following profiles are active:
- integration-tests
Если мы хотим активировать несколько профилей одновременно, мы используем список профилей, разделенных запятыми:
mvn package -P integration-tests,mutation-tests
4.3. Активен по умолчанию
Если мы всегда хотим выполнять профиль, мы можем сделать его активным по умолчанию:
<profile>
<id>integration-tests</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
Затем мы можем запустить пакет mvn
без указания профилей и убедиться, что профиль интеграции-теста
активен.
Однако, если мы запустим команду Maven и включим другой профиль, то профиль activeByDefault
будет пропущен. Поэтому, когда мы запускаем mvn package -Pmutation-tests
, активен только профильmutation-tests .
Когда мы активируем другими способами, профиль activeByDefault
также пропускается, как мы увидим в следующих разделах.
4.4. На основе свойства
Мы можем активировать профили в командной строке. Однако иногда удобнее, если они активируются автоматически. Например, мы можем основывать его на системном свойстве -D :
<profile>
<id>active-on-property-environment</id>
<activation>
<property>
<name>environment</name>
</property>
</activation>
</profile>
Теперь мы активируем профиль командой mvn package -Denvironment
.
Также можно активировать профиль, если свойство отсутствует:
<property>
<name>!environment</name>
</property>
Или мы можем активировать профиль , если свойство имеет определенное значение:
<property>
<name>environment</name>
<value>test</value>
</property>
Теперь мы можем запустить профиль с пакетом mvn -Denvironment=test.
Наконец, мы можем активировать профиль, если свойство имеет значение, отличное от указанного:
<property>
<name>environment</name>
<value>!test</value>
</property>
4.5. На основе версии JDK
Другой вариант — включить профиль на основе JDK, работающего на машине. В этом случае мы хотим включить профиль, если версия JDK начинается с 11:
<profile>
<id>active-on-jdk-11</id>
<activation>
<jdk>11</jdk>
</activation>
</profile>
Мы также можем использовать диапазоны для версии JDK, как описано в Синтаксисе диапазона версий Maven .
4.6. На основе операционной системы
Кроме того, мы можем активировать профиль на основе некоторой информации об операционной системе.
И если мы не уверены в этом, мы можем сначала использовать команду mvn Enforcer:display-info
, которая дает следующий вывод на моей машине:
Maven Version: 3.5.4
JDK Version: 11.0.2 normalized as: 11.0.2
OS Info: Arch: amd64 Family: windows Name: windows 10 Version: 10.0
После этого мы можем настроить профиль, который активируется только в Windows 10:
<profile>
<id>active-on-windows-10</id>
<activation>
<os>
<name>windows 10</name>
<family>Windows</family>
<arch>amd64</arch>
<version>10.0</version>
</os>
</activation>
</profile>
4.7. На основе файла
Другой вариант — запустить профиль , если файл существует
или отсутствует
.
Итак, давайте создадим тестовый профиль, который выполняется только в том случае, если testreport.html
еще не присутствует:
<activation>
<file>
<missing>target/testreport.html</missing>
</file>
</activation>
5. Деактивация профиля
Мы видели много способов активировать профили, но иногда нам также нужно отключить один из них.
Чтобы отключить профиль, мы можем использовать '!' или же '-'.
Итак, чтобы отключить профиль active-on-jdk-11
, мы выполняем команду mvn compile -P -active-on-jdk-11
.
6. Заключение
В этой статье мы увидели, как работать с профилями Maven, поэтому мы можем создавать различные конфигурации сборки.
Профили помогают выполнять определенные элементы сборки, когда они нам нужны. Это оптимизирует процесс сборки и помогает быстрее давать обратную связь разработчикам.
Не стесняйтесь взглянуть на готовый файл pom.xml
на GitHub .