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.

Wolmir Cezer Garbin por Wolmir Cezer Garbin - - Java - TUTORIAL

Última atualização em: | 5834 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 profile prod. Abaixo em build temos um filter que serve como opção default para gerar os recursos de configuração **/*.properties em target/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 pasta resources 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.


Apoiadores

Publique seu post no Receitas de Código

Aguarde, estamos trabalhando para que você possa publicar sua postagem no Receitas de Código!