Maven - Curso Básico
Aula 6 - Build Profiles
Agenda
● Aula 1: Introdução;
● Aula 2: O POM - Parte 1;
● Aula 3: O POM - Parte 2;
● Aula 4: O POM - Parte 3;
● Aula 5: Ciclos de Vida;
● Aula 6: Build Profiles;
● Aula 7: Plugins, CLI e Conclusão;
2Édipo Daniel Aragão - Maven Básico
Frase Motivacional
3
“A persistência é o caminho do êxito” - Charles Spencer Chaplin
Édipo Daniel Aragão - Maven Básico
Última Aula!
O que é um ciclo de vida?
4Édipo Daniel Aragão - Maven Básico
Ú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
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
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
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
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
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
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
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
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
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
A Portabilidade via Maven Profiles
15
1. Um exemplo de um
Maven Profile:
Édipo Daniel Aragão - Maven Básico
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
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
A Portabilidade via Maven Profiles
18
1. mvn install -P production -X
Édipo Daniel Aragão - Maven Básico
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
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
Ativação de Profiles
21Édipo Daniel Aragão - Maven Básico
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
Ativação de Profiles
23Édipo Daniel Aragão - Maven Básico
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
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
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
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
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
29Édipo Daniel Aragão - Maven Básico
30Édipo Daniel Aragão - Maven Básico

Maven - Aula 06

  • 1.
    Maven - CursoBásico Aula 6 - Build Profiles
  • 2.
    Agenda ● Aula 1:Introdução; ● Aula 2: O POM - Parte 1; ● Aula 3: O POM - Parte 2; ● Aula 4: O POM - Parte 3; ● Aula 5: Ciclos de Vida; ● Aula 6: Build Profiles; ● Aula 7: Plugins, CLI e Conclusão; 2Édipo Daniel Aragão - Maven Básico
  • 3.
    Frase Motivacional 3 “A persistênciaé o caminho do êxito” - Charles Spencer Chaplin Édipo Daniel Aragão - Maven Básico
  • 4.
    Última Aula! O queé um ciclo de vida? 4Édipo Daniel Aragão - Maven Básico
  • 5.
    Última Aula! 5 1. Existem3 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. Profilesgarantem 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. Mavenpermite 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 viaMaven 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 viaMaven Profiles 15 1. Um exemplo de um Maven Profile: Édipo Daniel Aragão - Maven Básico
  • 16.
    A Portabilidade viaMaven 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 viaMaven 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 viaMaven Profiles 18 1. mvn install -P production -X Édipo Daniel Aragão - Maven Básico
  • 19.
    Sobrescrita do POMvia 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
  • 21.
    Ativação de Profiles 21ÉdipoDaniel 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
  • 23.
    Ativação de Profiles 23ÉdipoDaniel Aragão - Maven Básico
  • 24.
    Configuração de Ativaçãode 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ênciade 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ênciade 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ênciade 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
  • 29.
    29Édipo Daniel Aragão- Maven Básico
  • 30.
    30Édipo Daniel Aragão- Maven Básico