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

File di configurazione di costruzione Maven

Il file di configurazione di costruzione è una serie di valori delle opzioni di configurazione che può essere utilizzato per impostare o sovrascrivere i valori predefiniti di costruzione Maven.

Utilizzando il file di configurazione di costruzione, puoi personalizzare il modo di costruzione per diversi ambienti, come produzione (Production) e sviluppo (Development).

Il file di configurazione viene specificato nel file pom.xml utilizzando l'elemento activeProfiles o profiles e può essere attivato in vari modi. Il file di configurazione modifica il POM durante la costruzione e viene utilizzato per impostare diversi ambienti di destinazione per i parametri (ad esempio, gli indirizzi dei server database per sviluppo (Development), test (Testing) e produzione (Production)).

Tipi di file di configurazione di costruzione

Il file di configurazione di costruzione ha in generale tre tipi:

TipoDove definire
Livello progetto (Per Project)Definito nel file POM del progetto (pom.xml)
Livello utente (Per User)Definito nel file xml delle impostazioni di Maven ( %USER_HOME%/.m2/settings.xml)
Globale (Global)Definito nel file di impostazioni globali di Maven ( %M2_HOME%/conf/settings.xml)

Attivazione del file di configurazione

Il file di configurazione di costruzione di Maven può essere attivato in molti modi.

  • Attivazione esplicita tramite input della console dei comandi.

  • Tramite impostazioni Maven.

  • Basato su variabili di ambiente (variabili utente o di sistema).

  • Impostazioni del sistema operativo (ad esempio, serie Windows).

  • Esistenza o assenza di file.

Esempio di attivazione del file di configurazione

Supponiamo che la struttura del progetto sia la seguente:

Tra cui ci sono tre file di test nella cartella src/main/resources:

Nome del fileDescrizione
env.propertiesConfigurazione predefinita utilizzata se non viene specificato alcun file di configurazione.
env.test.propertiesConfigurazione di test utilizzata quando viene utilizzato il file di configurazione di test.
env.prod.propertiesConfigurazione di produzione utilizzata quando viene utilizzato il file di configurazione di produzione.

Attenzione:Questi tre file di configurazione non rappresentano la funzione dei file di configurazione di costruzione, ma sono utilizzati per lo scopo di questo test; ad esempio, se specifico che il file di configurazione di costruzione è prod, il progetto utilizza il file env.prod.properties.

Attenzione:L'esempio seguente utilizza ancora il plugin AntRun, perché questo plugin può bindere la fase del ciclo di vita di Maven e senza scrivere alcun codice può stampare informazioni, copiare file ecc., attraverso di esso. L'altro non ha nulla a che fare con la configurazione di costruzione di questa volta.

1、Attivazione del file di configurazione

Il profile ci permette di definire una serie di informazioni di configurazione e specificare le condizioni di attivazione. In questo modo possiamo definire più profile, ognuno con condizioni di attivazione e informazioni di configurazione diverse, raggiungendo l'effetto di utilizzare diverse informazioni di configurazione in diversi ambienti.

Nei seguenti esempi, aggiungeremo il goal maven-antrun-plugin:run alla fase di test. In questo modo possiamo stampare informazioni di testo in diversi profile. Utilizzeremo pom.xml per definire diversi profile e attivare i profile utilizzando il comando maven nella console dei comandi.

Il file pom.xml è il seguente:

<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>Using 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>Using 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>

Attenzione:构建配置文件Adottato <profiles> 节点。

说明:上面新建了三个 <profiles>,其中 <id>  区分了不同的 <profiles> 执行不同的 AntRun 任务;而 AntRun 的任务可以这么理解,AntRun 监听 test 的 Maven 生命周期阶段,当 Maven 执行 test 时,就除了发 AntRun 的任务,任务里面为输出文本并复制文件到指定的位置;而至于要执行哪个 AntRun 任务,此时构建配置文件起到了传输指定的作用,比如,通过命令行参数输入指定的 <id>

Esegui il comando:

mvn test -Ptest

提示:第一个 test 为 Maven 生命周期阶段,第 2 个 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>

Esegui il comando:

mvn test

Suggerimento 1:此时不需要使用 -Ptest 来输入参数了,上面的 setting.xml 文件的 <activeprofile> 已经指定了 test 参数代替了。

Suggerimento 2:也可以使用在 %M2_HOME%/conf/settings.xml 的文件进行配置,效果一致。

Risultato dell'esecuzione:

3、通过环境变量激活配置文件

先把上一步测试的 setting.xml 值全部去掉。

然后在 pom.xml 里面的 为 test 的 节点,加入 节点:

<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>Using 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>Using 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>

Esegui il comando:

mvn test -Denv=test

Suggerimento 1:Sopra, ho passato l'ambiente delle variabili di sistema tramite -D, dove evn corrisponde al valore <name> impostato prima, e test corrisponde a <value>.

Suggerimento 2:Ho testato l'ambiente delle variabili di sistema su Windows 10, ma non ha funzionato, quindi, devo passare attraverso -D.

Risultato dell'esecuzione:

4. Attivazione dei file di configurazione attraverso il sistema operativo

L'elemento activation contiene le seguenti informazioni di sistema operativo. Quando il sistema è Windows XP, il Profile test verrà attivato.

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

Ora apri la console dei comandi, vai alla directory in cui si trova pom.xml e esegui il comando mvn seguente. Non utilizzare l'opzione -P per specificare il nome del Profile. Maven mostrerà i risultati del Profile test attivato.

mvn test

5. Attivazione dei file di configurazione attraverso la presenza o la mancanza di file

Ora usa l'elemento activation per includere le seguenti informazioni di sistema operativo. Quando target/generated-sources/axistools/wsdl2java/com/companyname/group è mancante, il Profile test verrà attivato.

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

Ora apri la console dei comandi, vai alla directory in cui si trova pom.xml e esegui il comando mvn seguente. Non utilizzare l'opzione -P per specificare il nome del Profile. Maven mostrerà i risultati del Profile test attivato.

mvn test

Riferimento: https://www.cnblogs.com/EasonJim/p/6828743.html