Профили сборки Maven

Профили сборки — это набор значений конфигурации, которые можно использовать для установки или переопределения настроек сборки Maven по умолчанию.

С помощью профилей сборки можно настраивать процесс сборки для различных сред, таких как Production и Development.

Профили задаются в файле pom.xml с помощью элементов activeProfiles или profiles и могут активироваться различными способами. Профили изменяют POM во время сборки и используются для установки параметров для различных целевых сред (например, адресов серверов баз данных в средах Development, Testing и Production).


Типы профилей сборки

Существует три основных типа профилей сборки:

TypeГде он определён
На уровне проекта Определён в файле POM проекта pom.xml
На уровне пользователя Определяется в XML-файле настроек Maven (%USER_HOME%/.m2/settings.xml)
Глобальный Определяется в глобальном XML-файле настроек Maven (%M2_HOME%/conf/settings.xml)

Активация профиля

Профили сборки Maven можно активировать несколькими способами.

  • Явная активация с использованием ввода из командной консоли.
  • Через настройки Maven.
  • На основе переменных среды (пользовательских или системных переменных).
  • Настройки операционной системы (например, семейства Windows).
  • Наличие или отсутствие файла.

Примеры активации профиля

Предположим, структура проекта выглядит следующим образом:

Среди них в папке src/main/resources есть три тестовых файла:

Имя файлаОписание
env.properties Конфигурация, используемая по умолчанию, когда не указан профиль.
env.test.properties Тестовая конфигурация, используемая, когда активен тестовый профиль.
env.prod.properties Производственная конфигурация, используемая, когда активен производственный профиль.

Примечание:Эти три файла конфигурации не отражают функциональность профилей сборки; они предназначены только для целей этого теста. Например, когда я указываю профиль сборки как prod, проект использует файл env.prod.properties.

Примечание:В приведённом ниже примере по-прежнему используется плагин AntRun, потому что этот плагин может привязываться к фазам жизненного цикла Maven и через теги Ant выводить информацию, копировать файлы и т. д., без написания какого-либо кода. Вот и всё. Остальное не связано с профилями сборки.

1. Активация профиля

Профиль позволяет нам определить набор конфигурационной информации, а затем указать условия его активации. Таким образом, мы можем определить несколько профилей, каждый из которых соответствует разным условиям активации и конфигурационной информации, достигая эффекта использования разной конфигурационной информации в разных средах.

В следующем примере мы добавляем цель maven-antrun-plugin:run в фазу test. Это позволяет нам выводить текстовую информацию в разных профилях. Мы будем использовать pom.xml для определения разных профилей и использовать команды Maven в командной консоли для активации профилей.

Файл pom.xml выглядит следующим образом:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.jsoft.test</groupId> <artifactId>testproject</artifactId> <packaging>jar</packaging> <version>0.1-SNAPSHOT</version> <name>testproject</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <profiles> <profile> <id>test</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.8</version> <executions> <execution> <phase>test</phase> <goals> <цель>запуск</цель> </цели> <конфигурация> <задачи> <echo>Использование env.test.properties</echo> <copy file="src/main/resources/env.test.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> <profile> <id>normal</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.8</version> <executions> <execution> <phase>test</phase> <goals> <цель>запуск</цель> </цели> <конфигурация> <задачи> <echo>Использование env.properties</echo> <copy file="src/main/resources/env.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> <profile> <id>prod</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.8</version> <executions> <execution> <phase>test</phase> <goals> <цель>запуск</цель> </цели> <конфигурация> <задачи> <echo>Использование env.prod.properties</echo> <copy file="src/main/resources/env.prod.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles> </project>

Примечание:Профиль сборкииспользует<profiles>узел.

Объяснение:Три<profiles>были созданы выше, где<id>различает разные<profiles>Задачи AntRun выполняются; задачу AntRun можно понять так: AntRun прослушивает фазу test жизненного цикла Maven. Когда Maven выполняет test, он запускает задачу AntRun, которая выводит текст и копирует файлы в указанное место. Что касается того, какую задачу AntRun выполнять, на этом этапепрофиль сборкииграет роль указания того, что передавать, например, путём ввода указанного<id>。

Выполните команду:

mvn test -Ptest

Совет: Первый test — это фаза жизненного цикла Maven, а второй test — этопрофиль сборкиуказанный параметр <id>, который передаётся через-Pконечно, он может быть prod или normal, которые вы определяете сами.<id>。

Результат выполнения следующий:

Видно, что задача AntRun была успешно запущена. Кроме того, она соответствуетпрофилю сборки, <id> которого — test.

Теперь проверьте две другие команды, и результаты следующие:

2. Активация профилей через настройки Maven

Откройте в%USER_HOME%/.m2каталоге файлsettings.xml, где%USER_HOME%обозначает домашний каталог пользователя. Если файл settings.xml не существует, просто скопируйте%M2_HOME%/conf/settings.xmlв каталог .m2, где%M2_HOME%обозначает каталог установки Maven.

Настройте файл settings.xml, добавив<activeProfiles>属性:

<settings xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> ... <activeProfiles> <activeProfile>test</activeProfile> </activeProfiles> </settings>

Выполните команду:

mvn test

Совет 1:На этом этапе нет необходимости использовать -Ptest для ввода параметра. В <activeprofile> в приведённом выше файле settings.xml уже вместо этого указан параметр test.

Совет 2:Вы также можете настроить это в%M2_HOME%/conf/settings.xmlфайле, и эффект будет таким же.

Результат выполнения:

3. Активация профилей через переменные среды

Сначала удалите все settings.xml из предыдущего.

Затем в pom.xml, внутри узла <profile> с <id> test, добавьте узел <activation>:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.jsoft.test</groupId> <artifactId>testproject</artifactId> <packaging>jar</packaging> <version>0.1-SNAPSHOT</version> <name>testproject</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <profiles> <profile> <id>test</id> <activation> <property> <name>env</name> <value>test</value> </property> </activation> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.8</version> <executions> <execution> <phase>test</phase> <goals> <цель>запуск</цель> </цели> <конфигурация> <задачи> <echo>Использование env.test.properties</echo> <copy file="src/main/resources/env.test.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> <profile> <id>normal</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.8</version> <executions> <execution> <phase>test</phase> <goals> <цель>запуск</цель> </цели> <конфигурация> <задачи> <echo>Использование env.properties</echo> <copy file="src/main/resources/env.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> <profile> <id>prod</id> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-antrun-plugin</artifactId> <version>1.8</version> <executions> <execution> <phase>test</phase> <goals> <цель>запуск</цель> </цели> <конфигурация> <задачи> <echo>Использование env.prod.properties</echo> <copy file="src/main/resources/env.prod.properties" tofile="${project.build.outputDirectory}/env.properties" overwrite="true"/> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles> </project>

Выполните команду:

mvn test -Denv=test

Совет 1:В приведённом выше примере используется -D для передачи переменных среды, где env соответствует только что заданному значению <name>, а test соответствует <value>.

Совет 2:Я тестировал системные переменные среды в Windows 10, но они не сработали, поэтому их можно передать только через-Dpassing.

Результат выполнения:

4. Активация профилей через операционную систему

Элемент activation содержит следующую информацию об операционной системе. Когда система — Windows XP, будет активирован профиль test.

<profile> <id>test</id> <activation> <os> <name>Windows XP</name> <family>Windows</family> <arch>x86</arch> <version>5.1.2600</version> </os> </activation> </profile>

Теперь откройте командную консоль, перейдите в каталог, содержащий pom.xml, и выполните следующую команду mvn. Не используйте опцию -P для указания имени профиля. Maven отобразит результат активированного профиля test.

mvn test

5. Активация профилей через наличие или отсутствие файла

Теперь используйте элемент activation, чтобы включить следующую информацию о файле. Когда target/generated-sources/axistools/wsdl2java/com/companyname/group отсутствует, будет активирован профиль test.

<profile> <id>test</id> <activation> <file> <missing>target/generated-sources/axistools/wsdl2java/ com/companyname/group</missing> </file> </activation> </profile>

Теперь откройте командную консоль, перейдите в каталог, содержащий pom.xml, и выполните следующую команду mvn. Не используйте опцию -P для указания имени профиля. Maven отобразит результат активированного профиля test.

mvn test


Ссылка: https://www.cnblogs.com/EasonJim/p/6828743.html

Другие расширения