Maven - Construir Perfis

O que é Build Profile?

Um perfil de construção é um conjunto de valores de configuração, que pode ser usado para definir ou substituir os valores padrão da construção Maven. Usando um perfil de construção, você pode customizar a construção para diferentes ambientes, como ambientes de Produção v / s Desenvolvimento.

Os perfis são especificados no arquivo pom.xml usando seus elementos activeProfiles / profiles e são acionados de várias maneiras. Os perfis modificam o POM no momento da construção e são usados ​​para fornecer aos parâmetros diferentes ambientes de destino (por exemplo, o caminho do servidor de banco de dados nos ambientes de desenvolvimento, teste e produção).

Tipos de Perfil de Construção

Perfis de construção são principalmente de três tipos.

Tipo Onde está definido
Por Projeto Definido no arquivo POM do projeto, pom.xml
Por usuário Definido no arquivo xml de configurações do Maven (% USER_HOME% /. M2 / settings.xml)
Global Definido no arquivo xml de configurações globais Maven (% M2_HOME% / conf / settings.xml)

Ativação de Perfil

Um perfil de construção Maven pode ser ativado de várias maneiras.

  • Usando explicitamente a entrada do console de comando.
  • Por meio de configurações de maven.
  • Baseado em variáveis ​​de ambiente (variáveis ​​de usuário / sistema).
  • Configurações do sistema operacional (por exemplo, família Windows).
  • Arquivos presentes / ausentes.

Exemplos de ativação de perfil

Vamos supor a seguinte estrutura de diretório do seu projeto -

Agora, sob src/main/resources, existem três arquivos específicos do ambiente -

Sr. Não. Nome e descrição do arquivo
1

env.properties

configuração padrão usada se nenhum perfil for mencionado.

2

env.test.properties

configuração de teste quando o perfil de teste é usado.

3

env.prod.properties

configuração de produção quando o perfil de produção é usado.

Ativação Explícita de Perfil

No exemplo a seguir, vamos anexar maven-antrun-plugin: run goal para testar a fase. Isso nos permitirá ecoar mensagens de texto para diferentes perfis. Estaremos usando pom.xml para definir perfis diferentes e ativaremos o perfil no console de comando usando o comando maven.

Suponha que criamos o seguinte pom.xml na pasta C: \ MVN \ project.

<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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <profiles>
      <profile>
         <id>test</id>
         <build>
            <plugins>
               <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-antrun-plugin</artifactId>
                  <version>1.1</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"/>
                           </tasks>
                        </configuration>
                     </execution>
                  </executions>
               </plugin>
            </plugins>
         </build>
      </profile>
   </profiles>
</project>

Agora abra o console de comando, vá para a pasta que contém pom.xml e execute o seguinte mvncomando. Passe o nome do perfil como argumento usando a opção -P.

C:\MVN\project>mvn test -Ptest

O Maven começará a processar e exibir o resultado do perfil de construção de teste.

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [test]
[INFO] ------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]

[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!

[INFO] Copying 3 resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources {execution: default-testResources}]

[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!

[INFO] skip non existing resourceDirectory C:\MVN\project\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: C:\MVN\project\target\surefire-reports

-------------------------------------------------------
T E S T S
-------------------------------------------------------

There are no tests to run.
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] [antrun:run {execution: default}]
[INFO] Executing tasks
[echo] Using env.test.properties
[INFO] Executed tasks

[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------

[INFO] Total time: 1 second
[INFO] Finished at: Sun Jul 08 14:55:41 IST 2012
[INFO] Final Memory: 8M/64M
[INFO] ------------------------------------------------------------------

Agora, como exercício, você pode realizar as seguintes etapas -

  • Adicione outro elemento de perfil ao elemento de perfis de pom.xml (copie o elemento de perfil existente e cole-o onde os elementos de perfil terminam).

  • Atualize a id deste elemento de perfil de teste para normal.

  • Atualize a seção da tarefa para echo env.properties e copie env.properties para o diretório de destino.

  • Repita novamente as três etapas acima, atualize a id para a seção prod e task para env.prod.properties.

  • Isso é tudo. Agora você tem três perfis de construção prontos (normal / teste / prod).

Agora abra o console de comando, vá para a pasta que contém pom.xml e execute o seguinte mvncomandos. Passe os nomes dos perfis como argumento usando a opção -P.

C:\MVN\project>mvn test -Pnormal

C:\MVN\project>mvn test -Pprod

Verifique a saída da construção para ver a diferença.

Ativação do perfil por meio das configurações do Maven

Abra o Maven settings.xml arquivo disponível no diretório% USER_HOME% /. m2 onde %USER_HOME%representa o diretório inicial do usuário. Se o arquivo settings.xml não estiver lá, crie um novo.

Adicione o perfil de teste como um perfil ativo usando o nó Perfis ativos, conforme mostrado abaixo no exemplo.

<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">
   <mirrors>
      <mirror>
         <id>maven.dev.snaponglobal.com</id>
         <name>Internal Artifactory Maven repository</name>
         <url>http://repo1.maven.org/maven2/</url>
         <mirrorOf>*</mirrorOf>
      </mirror>
   </mirrors>
   <activeProfiles>
      <activeProfile>test</activeProfile>
   </activeProfiles>
</settings>

Agora abra o console de comando, vá para a pasta que contém pom.xml e execute o seguinte mvncomando. Não passe o nome do perfil usando a opção -P. O Maven exibirá o resultado do perfil de teste sendo um perfil ativo.

C:\MVN\project>mvn test

Ativação de perfil por meio de variáveis ​​de ambiente

Agora remova o perfil ativo do maven settings.xml e atualize o perfil de teste mencionado em pom.xml. Adicione o elemento de ativação ao elemento de perfil conforme mostrado abaixo.

O perfil de teste será acionado quando a propriedade do sistema "env" for especificada com o valor "test". Crie uma variável de ambiente "env" e defina seu valor como "teste".

<profile>
   <id>test</id>
   <activation>
      <property>
         <name>env</name>
         <value>test</value>
      </property>
   </activation>
</profile>

Vamos abrir o console de comando, ir para a pasta que contém pom.xml e executar o seguinte mvn comando.

C:\MVN\project>mvn test

Ativação de perfil via sistema operacional

Elemento de ativação para incluir detalhes do sistema operacional conforme mostrado abaixo. Este perfil de teste será acionado quando o sistema for Windows XP.

<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, vá para a pasta que contém pom.xml e execute o seguinte mvncomandos. Não passe o nome do perfil usando a opção -P. O Maven exibirá o resultado do perfil de teste sendo um perfil ativo.

C:\MVN\project>mvn test

Ativação de perfil via arquivo presente / ausente

Agora, elemento de ativação para incluir detalhes do sistema operacional, conforme mostrado abaixo. O perfil de teste será acionado quandotarget/generated-sources/axistools/wsdl2java/com/companyname/group está desaparecido.

<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, vá para a pasta que contém pom.xml e execute o seguinte mvncomandos. Não passe o nome do perfil usando a opção -P. O Maven exibirá o resultado do perfil de teste sendo um perfil ativo.

C:\MVN\project>mvn test