Como ativar um profile maven por linha de comando
Este tutorial vai mostrar como criar perfis para diferentes tipos de ambientes e utiliza-los usando linha de comando no maven.
Última atualização em: | 6025 Visualizações
É comun em projetos termos pelo menos dois ambientes: desenvolvimento
e produção
por exemplo. Podendo ainda ter: homologação
ou demonstração
dependendo de cada empresa.
Então neste post vou mostrar como é possível ter diferentes tipos de profiles para que possamos gerar artefatos para diferentes tipos de ambientes.
Para começar com nosso tutorial, vamos organizar nosso projeto maven para que possamos criar nossos perfis.
Preparando o projeto
O projeto base para este tutorial tem a seguinte estrutura:
SampleProfiles /
- src /
- - main /
- - - java
- - - resources /
- - - - config.properties
- environment-dev.properties
- environment-prod.properties
- pom.xml
Sendo que cada arquivo está configurado com o seguinte conteúdo:
config.properties
url=${url_receitas_de_codigo}
environment-dev.properties
url_receitas_de_codigo=http://localhost:8080
environment-prod.properties
url_receitas_de_codigo=https://receitasdecodigo.com.br
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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>br.com.receitasdecodigo</groupId>
<artifactId>SampleProfiles</artifactId>
<version>1.0-SNAPSHOT</version>
<profiles>
<profile>
<id>prod</id>
<build>
<filters>
<filter>environment-prod.properties</filter>
</filters>
</build>
</profile>
</profiles>
<build>
<filters>
<filter>environment-dev.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
</project>
Note que no arquivo
pom.xml
definimos um profileprod
. Abaixo embuild
temos um filter que serve como opção default para gerar os recursos de configuração**/*.properties
emtarget/classes/
.
Configurando os perfis no maven
Tendo os arquivos do projeto, veja que foi adicionado a tag profiles
no arquivo pom.xml
definindo um profile de prod
.
<profile>
<id>prod</id>
<build>
<filters>
<filter>environment-prod.properties</filter>
</filters>
</build>
</profile>
Assim quando for gerado usando um comando para gerar com base neste perfil, será utilizado o arquivo: environment-prod.properties
para escrever nas variáveis definidas entre ${}
nos arquivos de configuração. No nosso exemplo, vai subistituir: ${url_receitas_de_codigo}
do arquivo config.properties
por https://receitasdecodigo.com.br
.
Mas caso não seja definido um perfil para ser utilizado, será carregado o padrão, que está definido na tag build/filters
. Para este exemplo o arquivo: environment-dev.properties
.
<filters>
<filter>environment-dev.properties</filter>
</filters>
Por fim, temos dentro de build/resources
a indicação para que o maven ao gerar o artefato filtre todos os arquivos *.properties
para subistituir qualquer variável que estiver definida no arquivo de perfil.
Executando o comando mvn
Após o projeto estar configurado, basta executar o comando para gerar o artefato:
mvn package
Ao executar este comando será carregado as configurações com base no perfil configurado como default no build: <filter>environment-dev.properties</filter>
. Deixando o arquivo de configuração da seguinte forma:
target/classes
url=http://localhost:8080
Note que o arquivo
config.properties
que está na pastaresources
não será afetado.
Para executar com base em outro perfil basta definir no comando bash:
mvn package -P prod
Assim será carregado as opções definidas em environment-prod.properties
deixando o arquivo config.properties
da seguinte forma:
target/classes
url=https://receitasdecodigo.com.br
Não esqueca de deixar suas dúvidas nos comentários e compartilhar este post.