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

Configuração de Arquivo de Construção Maven

Os arquivos de configuração de construção são uma série de valores de itens de configuração que podem ser usados para definir ou sobrescrever os valores padrão da construção do Maven.

Usando arquivos de configuração de construção, você pode personalizar a maneira de construção para diferentes ambientes, como ambiente de produção e ambiente de desenvolvimento.

Os arquivos de configuração são especificados no arquivo pom.xml usando os elementos activeProfiles ou profiles e podem ser acionados de várias maneiras. Eles modificam o POM durante a construção e são usados para definir diferentes ambientes de destino para os parâmetros (por exemplo, servidores de banco de dados em ambientes de desenvolvimento, teste e produção).

Tipos de arquivos de configuração de construção

Geralmente, há três tipos de arquivos de configuração de construção:

TipoOnde definir
Nível de projeto (Por Projeto)Definido no arquivo POM do projeto (pom.xml)
Nível de usuário (Por Usuário)Definido no arquivo de configuração do Maven (%USER_HOME%)/.m2/settings.xml)
Global (Global)Definido no arquivo de configuração global do Maven (%M)2_HOME%/conf/settings.xml)

Ativação do arquivo de configuração

O arquivo de configuração de construção do Maven pode ser ativado de várias maneiras.

  • Ativação explícita através da consola de comando.

  • Configuração via Maven.

  • Baseado em variáveis de ambiente (usuário ou sistema).

  • Configuração do sistema operacional (por exemplo, a série Windows).

  • A existência ou ausência de arquivo.

Exemplo de ativação de arquivo de configuração

Supondo que a estrutura do projeto seja a seguinte:

Dentre eles, no src/main/Existem três arquivos de teste na pasta resources:

Nome do arquivoDescrição
env.propertiesConfiguração padrão usada quando não for especificado o arquivo de configuração.
env.test.propertiesConfiguração de teste ao usar o arquivo de configuração de teste.
env.prod.propertiesConfiguração de produção ao usar o arquivo de configuração de produção.

Atenção:Esses três arquivos de configuração não representam a função do arquivo de configuração de construção, mas são usados para o propósito deste teste; por exemplo, se eu especificar o arquivo de configuração de construção como prod, o projeto usará o arquivo env.prod.properties.

Atenção:O exemplo a seguir ainda está usando o plugin AntRun, porque esse plugin pode se ligar à fase do ciclo de vida do Maven e, sem escrever um único código, pode emitir informações, copiar arquivos e mais, apenas por meio de etiquetas do Ant. O resto não está relacionado ao arquivo de configuração de construção dessa vez.

1、ativação de arquivo de configuração

O profile nos permite definir uma série de informações de configuração, e especificar as condições de ativação. Dessa forma, podemos definir vários profiles, e cada profile correspondente a diferentes condições de ativação e informações de configuração, alcançando o efeito de usar diferentes informações de configuração em diferentes ambientes.

No exemplo a seguir, usaremos o maven-antrun-O objetivo do plugin:run é adicionado à fase de teste. Dessa forma, podemos emitir informações de texto em diferentes profiles. Usaremos o pom.xml para definir diferentes profiles e, no console de comando, usaremos o comando maven para ativar o profile.

O arquivo pom.xml é o seguinte:

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

Atenção:configuração de construçãoUsa <profiles> Nó.

Notas:Foram criados três novos <profiles>,onde <id>  Distingue diferentes <profiles> Executar diferentes tarefas do AntRun; enquanto as tarefas do AntRun podem ser compreendidas assim, o AntRun escuta a fase do ciclo de vida do test do Maven, quando o Maven executa o test, ele gera além das tarefas do AntRun, as tarefas dentro delas são para exibir texto e copiar arquivos para o local especificado; e sobre qual tarefa do AntRun executar, neste momentoconfiguração de construçãoJoga um papel de transmissão específica, por exemplo, através de parâmetros de linha de comando inserir o valor específico <id>

Execute o comando:

mvn test -Ptest

Dica: O primeiro test é a fase do ciclo de vida do Maven, o 2 um test paraconfiguração de construçãoO parâmetro <id> especificado, esse parâmetro é passado por -P para transmitir, claro, pode ser prod ou normal, esses são definidos por você<id>

O resultado da execução é o seguinte:

pode ver que foi acionado com sucesso a tarefa AntRun. E é correspondente.configuração de construçãoonde o <id> é a tarefa com <id> test.

e teste os outros dois comandos, os resultados são os seguintes:

2ativar o arquivo de configuração do Maven

abrir %USER_HOME%/.m2 o diretório settings.xml onde %USER_HOME% representa o diretório principal do usuário. Se o arquivo setting.xml não existir, copie diretamente %M2_HOME%/conf/settings.xml até .m2 onde %M2_HOME% representa o diretório de instalação do Maven.

Configure o arquivo setting.xml, adicione o atributo <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>

Execute o comando:

mvn test

Avisos 1:Neste momento, não é necessário usar -Ptest para inserir parâmetros, o arquivo setting.xml mencionado acima já especificou o parâmetro test para substituição.

Avisos 2:Também pode ser usado em %M2_HOME%/conf/settings.xml do arquivo para configurações, o efeito é o mesmo.

Resultados da Execução:

3、ativar o arquivo de configuração através das variáveis de ambiente

Primeiro, remova todos os valores do arquivo setting.xml do passo anterior.

Então, no nó <profile> com <id> test do arquivo pom.xml, adicione o nó <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>Usando 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>Usando 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>Usando 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>

Execute o comando:

mvn test -Denv=test

Avisos 1:Usado acima -D Passa o variável de ambiente, onde evn corresponde ao valor <name> configurado recentemente, test ao valor <value>.

Avisos 2:no Windows 10 Testei as variáveis de ambiente do sistema, mas não funcionaram, então, só posso usar -D Passagem.

Resultados da Execução:

4e, através do arquivo de configuração de ativação do sistema operacional

O elemento activation contém as informações do sistema operacional abaixo. Quando o sistema for Windows XP, o Profile de teste será acionado.

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

Agora abra o console de comando, navegue até o diretório onde o arquivo pom.xml está localizado e execute o comando mvn abaixo. Não use -A opção P especifica o nome do Profile. O Maven exibirá os resultados do Profile de teste ativado.

mvn test

5e, através da existência ou ausência do arquivo de configuração

Agora use o elemento activation para incluir as informações do sistema operacional abaixo. Quando o target/generated-sources/axistools/wsdl2java/com/companyname/Se o grupo estiver ausente, o Profile de teste será acionado.

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

Agora abra o console de comando, navegue até o diretório onde o arquivo pom.xml está localizado e execute o comando mvn abaixo. Não use -A opção P especifica o nome do Profile. O Maven exibirá os resultados do Profile de teste ativado.

mvn test

Referência: https://www.cnblogs.com/EasonJim/p/6828743.html