English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Конфигурация файла 构建 Maven

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

Используя конфигурационные файлы сборки, вы можете настроить способ сборки для различных сред, таких как производственная среда (Production) и среда разработки (Development).

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

Типы конфигурационных файлов для построения

Конфигурационные файлы Maven в основном делятся на три типа:

ТипГде определяется
Уровень проекта (Per Project)Определяется в файле POM проекта pom.xml
Уровень пользователя (Per User)Определяется в файле настроек Maven (%USER_HOME%/.m2/settings.xml)
Глобальный (Global)Определяется в глобальном файле настроек Maven (%M2_HOME%/conf/settings.xml)

Активация конфигурационного файла

Конфигурационные файлы Maven могут быть активированы несколькими способами.

  • Используя явную активацию через командную строку.

  • Через настройки Maven.

  • На основе переменных окружения (пользовательских или системных переменных).

  • Настройки операционной системы (например, серия Windows).

  • Существование или отсутствие файла.

Пример активации конфигурационного файла

Предположим, что структура проекта такая:

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

Имя файлаОписание
env.propertiesЕсли конфигурационный файл не указан, используется mặc địnhная конфигурация.
env.test.propertiesКонфигурации при использовании тестового конфигурационного файла.
env.prod.propertiesПроизводственные конфигурации при использовании производственного конфигурационного файла.

注意:Эти три конфигурационных файла не представляют собой функцию конфигурационных файлов для построения, а используются для целей текущего тестирования; например, если я指定的 конфигурационный файл для построения - prod, проект использует файл env.prod.properties.

注意:Следующий пример все еще использует плагин AntRun, потому что этот плагин может привязываться к этапам жизни Maven и выводить информацию, копировать файлы и т.д., не требуя написания кода, просто используя теги Ant. Остальное не относится к текущей конфигурации 构建.

1、Активация конфигурационного файла

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

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

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>
                             <goal>run</goal>
                          </goals>
                          <configuration>
                          <tasks>
                             <echo>Using 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>
                             <goal>run</goal>
                          </goals>
                          <configuration>
                          <tasks>
                             <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>
                             <goal>run</goal>
                          </goals>
                          <configuration>
                          <tasks>
                             <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监ляет фазу жизненного цикла Maven test, когда Maven выполняет test, он запускает задачи AntRun, в задачах 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% 代表 пользовательскую домашнюю директорию. Если файл setting.xml не существует, его напрямую копируют %M2_HOME%/conf/settings.xml в 目录 .m2, где %M2_HOME% 代表 Maven 安装目录。

Настройте файл setting.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 для ввода параметров, в файле setting.xml в <activeprofile> уже указан параметр test, который его заменяет.

Предупреждение 2:Это также можно использовать для %M2_HOME%/conf/settings.xml файл для конфигурации, эффект одинаковый.

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

3. Активировать конфигурационный файл через переменную окружения

Сначала удалите все значения setting.xml, полученные на предыдущем шаге.

Затем в узле <profile> с <id> test </id> в файле pom.xml добавить узел <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>
                             <goal>run</goal>
                          </goals>
                          <configuration>
                          <tasks>
                             <echo>Using 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>
                             <goal>run</goal>
                          </goals>
                          <configuration>
                          <tasks>
                             <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>
                             <goal>run</goal>
                          </goals>
                          <configuration>
                          <tasks>
                             <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, где evn соответствует только что установленному значению <name>, а test соответствует <value>.

Предупреждение 2:Тестировали переменные окружения системы на Windows 10, но они не действовали, поэтому, можно передавать только через -D.

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

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