English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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).
Geralmente, há três tipos de arquivos de configuração de construção:
Tipo | Onde 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) |
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.
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 arquivo | Descrição |
---|---|
env.properties | Configuração padrão usada quando não for especificado o arquivo de configuração. |
env.test.properties | Configuração de teste ao usar o arquivo de configuração de teste. |
env.prod.properties | Configuraçã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.
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:
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:
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:
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
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