Uma visão geral sobre build profiles em maven, como ativá-los ou desativá-los, quais caracteristicas dos build profiles, portáveis (amplo, por ambiente, por organização), não portáveis, etc.
4. Última Aula!
O que é um ciclo de vida?
4Édipo Daniel Aragão - Maven Básico
5. Última Aula!
5
1. Existem 3 ciclos de vida de build padrão:
a. clean;
b. default (ou build);
c. site;
http://maven.apache.org/components/ref/3.3.3/maven-core/lifecycles.html#cle
an_Lifecycle
2. É possível concatenar ciclos de vida num único comando:
a. mvn clean install site
Édipo Daniel Aragão - Maven Básico
6. Build Profiles
6
1. Profiles garantem a habilidade de customizar o build para ambientes
diferentes;
2. Portabilidade entre diferentes ambientes de build;
3. Ambientes de desenvolvimento diferentes seriam:
a. Produção
i. Lê de uma base de dados de produção.
b. Desenvolvimento
i. Lê de uma base de dados de desenvolvimento.
c. Diferentes Sistemas Operacionais;
d. Diferentes JVM's;
Édipo Daniel Aragão - Maven Básico
7. Build Profiles
7
1. Maven permite definir diversos builds profiles;
2. Build Profiles, ou somente profiles, podem sobrescrever quase toda definição
do pom.xml;
3. Antes de discutirmos mais sobre build profiles, precisamos falar de
portabilidade.
Édipo Daniel Aragão - Maven Básico
8. Portabilidade
8
1. O que é portabilidade de build?
2. É a medida de quão simples é fazer o build de um projeto em e para
diferentes ambientes.
3. Um build a partir do zero (from scratch):
a. Sem configuração e customizações → Maior Portabilidade
b. Muitas configuração e customizações → Menor Portabilidade
4. Mas como alcançamos portabilidade?
5. Existem diferentes tipos de portabilidade!
Édipo Daniel Aragão - Maven Básico
9. Builds Não Portáveis (Pior Cenário)
9
1. Toda ferramenta de build tem como intuito promover a portabilidade.
2. Mas nenhuma delas impedirá o build do seu projeto de não ser portável.
3. Um projeto não portável somente roda num ambiente específico, com
circunstâncias específicas:
a. "Aqui na minha máquina roda!";
4. Isso só é razoável se estiver sozinho e nunca irá distribuir seu projeto;
5. Se alguém obter o mesmo projeto terá que reescrever ou configurar diversos
itens.
6. O Maven NÃO Favorece builds não portáveis.
Édipo Daniel Aragão - Maven Básico
10. Portabilidade por Ambiente
10
1. Um build tem Portabilidade por Ambiente se:
a. Possui um mecanismo de customizar o comportamento e as
configurações para diferentes ambientes.
2. Um projeto que:
a. Tem uma configuração para um banco de dados de Teste na hora dos
testes.
b. Tem uma configuração para um banco de dados de Desenvolvimento na
hora do desenvolvimento.
c. Tem uma configuração para um banco de dados de Produção na hora
que está em produção.
3. Cada ambiente precisa do seu conjunto de variáveis configurada.
Édipo Daniel Aragão - Maven Básico
11. Portabilidade por Organização
11
1. Neste tipo de portabilidade podemos considerar que o projeto depende de
elementos internos de uma organização;
2. Um repositório com artefatos internos;
3. Acesso a recursos internos de rede;
4. Alguém que tente fazer o build do projeto externamente ao ambiente não
conseguirá fazê-lo.
Édipo Daniel Aragão - Maven Básico
12. Portabilidade Ampla (Wide)
12
1. Baixar o projeto, fazer o build e instalá-lo;
2. Este é o mais alto nível de portabilidade;
3. Especialmente importante para projetos
OpenSource;
4. Qualquer desenvolvedor pode fazer o
download;
Édipo Daniel Aragão - Maven Básico
13. Portabilidade Ampla (Wide)
13
1. Normalmente você não irá querer um build não portável.
a. Mas todos normalmente passam por esse problema.
2. Builds não portáveis em geral são gerados por politicagem.
a. Somente fulano ou sicrano sabe fazer fazer o build dessa coisa!
3. Em compensação sistemas amplamente portáveis tem seus problemas.
a. Tem em geral somente dependências abertas e gratuitas.
b. Se você depende do driver JDBC da Oracle por exemplo... não dá.
i. Você terá que baixá-la e associá-la ao projeto.
ii. MySQL e HSQLDB por exemplo já estão no Maven Repository.
4. É preciso buscar um equilíbrio.
Édipo Daniel Aragão - Maven Básico
14. A Portabilidade via Maven Profiles
14
1. Um Profile Maven é um conjunto alternativo de configurações.
a. Sobrescrever o conjunto default de configurações.
b. Tem um identificador e são configurados no pom.xml.
2. Você roda um comando mvn com uma "flag" e ativa o profile.
mvn -P ...
Édipo Daniel Aragão - Maven Básico
15. A Portabilidade via Maven Profiles
15
1. Um exemplo de um
Maven Profile:
Édipo Daniel Aragão - Maven Básico
16. A Portabilidade via Maven Profiles
16
1. No exemplo incluímos um profile "production" ao nosso projeto.
2. A tag <profiles> permite adicionar um ou mais profiles.
3. Em geral profiles são os últimos itens do pom.xml (porquê sobrescrevem
configurações anteriores).
4. O identificador do profile serve para invocá-lo pela linha de comando:
a. mvn -P profile_id
5. Acima sobrescrevemos as configurações padrão do plugin compile para
"production".
6. Definimos a remoção de informação de debug dos bytecodes.
7. Definimos a otimizamos dos bytecodes na compilação.
Édipo Daniel Aragão - Maven Básico
17. A Portabilidade via Maven Profiles
17
1. Você pode executar:
a. mvn install -P production -X
2. -X é uma opção de debug!
3. Você poderá ver a configuração utilizada no hora da execução do plugin
compiler para a goal compile.
4. Pode-se também que executar -Pproduction.
a. mvn install -Pproduction -X
Édipo Daniel Aragão - Maven Básico
18. A Portabilidade via Maven Profiles
18
1. mvn install -P production -X
Édipo Daniel Aragão - Maven Básico
19. Sobrescrita do POM via Profiles
19
1. No exemplo anterior
sobrescrevemos
a configuração de um plugin.
2. Mas quais outros os
elementos que podemos
sobrescrever?
Édipo Daniel Aragão - Maven Básico
20. Ativação de Profiles
20
1. No exemplo anterior ativamos um profile para sobrescrever uma configuração
já definida.
2. Mas e se quiséssemos que essa mudança fosse reativa?
a. Nosso profile mudasse de acordo com a versão do Java?
b. No caso variáveis do sistema.
3. O Maven permite ativar profiles de acordo com parâmetros de ambiente.
4. Vejamos um exemplo:
5. Queremos permitir o build do projeto tanto para JDK 1.7 quanto JDK 1.8.
a. No caso, existe uma particularidade de um módulo que utiliza elementos
presentes somente no JDK 1.8.
Édipo Daniel Aragão - Maven Básico
22. Ativação de Profiles
22
1. Se você executar um mvn install sobre esse pom veremos.
2. Se JDK 1.8 presente, projeto-especial será incluído no build.
a. Se não, não.
3. Essa propriedade da JDK é interessante porque podemos definir um range de
versões.
a. [1.5,) → Segue a mesma regra de versões que vimos anteriormente.
4. Podemos definir um "not", usando !.
Édipo Daniel Aragão - Maven Básico
24. Configuração de Ativação de Profile
24
1. Um profile somente é ativado quando todas condições são satisfeitas:
Édipo Daniel Aragão - Maven Básico
25. Ativação na Ausência de Propriedade
25
1. Abaixo temos uma variável de ambiente chamada "type";
2. O profile é ativado em sua ausência devido a operação "!";
a. ! é chamado de "bang" character e significa "not".
Édipo Daniel Aragão - Maven Básico
26. Ativação na Ausência de Propriedade
26
1. Profiles Maven podem ser definidos em 4 lugares:
a. pom.xml;
b. profiles.xml (${basedir}/profiles.xml.);
c. ~/.m2/settings.xml;
d. ${M2_HOME}/conf/settings.xml.
2. Com tantos lugares onde profiles podem ser definidos
a. Como saber quais estão ativos?
Édipo Daniel Aragão - Maven Básico
27. Ativação na Ausência de Propriedade
27
1. Você pode descobrir através do plugin help, goal active-profiles;
a. mvn help:active-profiles
Édipo Daniel Aragão - Maven Básicodipo Daniel Aragão - Maven Básico
28. Classificadores Por Plataforma
28
1. Apesar do java ser independente de plataforma…
2. Pode ser preciso produzir jars diferentes conforme a plataforma.
a. Por exemplo, ao escrever algum código nativo em C.
b. Nesse caso, são precisos qualificadores dependentes de plataforma.
3. Pode-se produzir um classificador com os plugins:
a. Maven Assembly ou
b. Maven Jar.
4. Exemplo:
Édipo Daniel Aragão - Maven Básico