SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Maven e Nexus. O que são essas ferramentas?
Maven e Nexus. O que são essas ferramentas?Maven e Nexus. O que são essas ferramentas?
Maven e Nexus. O que são essas ferramentas?Jocsa Rosendo
 
Maven 3, Sonar e Hudson
Maven 3, Sonar e HudsonMaven 3, Sonar e Hudson
Maven 3, Sonar e HudsonRodrigo Branas
 
The twelve factor apps and openruko
The twelve factor apps and openrukoThe twelve factor apps and openruko
The twelve factor apps and openrukoÉverton Ribeiro
 
Testando uma aplicação AngularJS utilizando o Karma
Testando uma aplicação AngularJS utilizando o KarmaTestando uma aplicação AngularJS utilizando o Karma
Testando uma aplicação AngularJS utilizando o KarmaHenrique Limas
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks phpIgor Moura
 
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAVRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAYelken Heckman Ferreira Gonzales
 
Pyramid - O Framework Web para Todos
Pyramid - O Framework Web para TodosPyramid - O Framework Web para Todos
Pyramid - O Framework Web para TodosRuda Filgueiras
 
Introdução ao Asp.NET MVC
Introdução ao Asp.NET MVCIntrodução ao Asp.NET MVC
Introdução ao Asp.NET MVCBenicio Ávila
 
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & HudsonSuporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & HudsonRicardo Ferreira
 
GlassFish e Maven: Java EE sem dor!
GlassFish e Maven: Java EE sem dor!GlassFish e Maven: Java EE sem dor!
GlassFish e Maven: Java EE sem dor!Bruno Borges
 
Adcut's presentation (Master's Assignment)
Adcut's presentation (Master's Assignment)Adcut's presentation (Master's Assignment)
Adcut's presentation (Master's Assignment)Leonardo Pereira
 
8 motivos-para-usar-o-yii2
8 motivos-para-usar-o-yii28 motivos-para-usar-o-yii2
8 motivos-para-usar-o-yii2Renato Lucena
 

Mais procurados (20)

Maverick v1.0
Maverick v1.0Maverick v1.0
Maverick v1.0
 
Aula maven
Aula   mavenAula   maven
Aula maven
 
Jboss tutorial
Jboss tutorialJboss tutorial
Jboss tutorial
 
Maven e Nexus. O que são essas ferramentas?
Maven e Nexus. O que são essas ferramentas?Maven e Nexus. O que são essas ferramentas?
Maven e Nexus. O que são essas ferramentas?
 
Maven 3, Sonar e Hudson
Maven 3, Sonar e HudsonMaven 3, Sonar e Hudson
Maven 3, Sonar e Hudson
 
The twelve factor apps and openruko
The twelve factor apps and openrukoThe twelve factor apps and openruko
The twelve factor apps and openruko
 
Testando uma aplicação AngularJS utilizando o Karma
Testando uma aplicação AngularJS utilizando o KarmaTestando uma aplicação AngularJS utilizando o Karma
Testando uma aplicação AngularJS utilizando o Karma
 
Analise frameworks php
Analise frameworks phpAnalise frameworks php
Analise frameworks php
 
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVAVRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
VRaptor - Um Framework MVC Web para desenvolvimento ágil com JAVA
 
Pyramid - O Framework Web para Todos
Pyramid - O Framework Web para TodosPyramid - O Framework Web para Todos
Pyramid - O Framework Web para Todos
 
Introdução ao Asp.NET MVC
Introdução ao Asp.NET MVCIntrodução ao Asp.NET MVC
Introdução ao Asp.NET MVC
 
Plugin Maven no Eclipse
Plugin Maven no EclipsePlugin Maven no Eclipse
Plugin Maven no Eclipse
 
Apache maven
Apache mavenApache maven
Apache maven
 
Maven 2
Maven 2Maven 2
Maven 2
 
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & HudsonSuporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
 
GlassFish e Maven: Java EE sem dor!
GlassFish e Maven: Java EE sem dor!GlassFish e Maven: Java EE sem dor!
GlassFish e Maven: Java EE sem dor!
 
Maven
MavenMaven
Maven
 
Adcut's presentation (Master's Assignment)
Adcut's presentation (Master's Assignment)Adcut's presentation (Master's Assignment)
Adcut's presentation (Master's Assignment)
 
Apache Maven
Apache MavenApache Maven
Apache Maven
 
8 motivos-para-usar-o-yii2
8 motivos-para-usar-o-yii28 motivos-para-usar-o-yii2
8 motivos-para-usar-o-yii2
 

Semelhante a Maven Build Profiles

Projetos Java com Maven
Projetos Java com MavenProjetos Java com Maven
Projetos Java com MavenEdgar Dantas
 
Maven: Introdução
Maven: IntroduçãoMaven: Introdução
Maven: IntroduçãoJugVale
 
TDC2011: Java EE 6 & Azure
TDC2011: Java EE 6 & AzureTDC2011: Java EE 6 & Azure
TDC2011: Java EE 6 & AzureDr. Spock
 
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse VirgoModularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse VirgoRegis Machado
 
Quick intro to Apache Maven
Quick intro to Apache MavenQuick intro to Apache Maven
Quick intro to Apache MavenInformantTalks
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorAllyson Barros
 
Começando com mulesoft e maven
Começando com mulesoft e mavenComeçando com mulesoft e maven
Começando com mulesoft e mavenJeison Barros
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaÁlvaro Farias Pinheiro
 
Testes Funcionais e Estruturais utilizando Selenium IDE e Cobertura
Testes Funcionais e Estruturais utilizando Selenium IDE e CoberturaTestes Funcionais e Estruturais utilizando Selenium IDE e Cobertura
Testes Funcionais e Estruturais utilizando Selenium IDE e CoberturaTiago Antônio da Silva
 
Solucionando a Teoria do Caos com Cypress.io
Solucionando a Teoria do Caos com Cypress.ioSolucionando a Teoria do Caos com Cypress.io
Solucionando a Teoria do Caos com Cypress.ioPatrick Monteiro
 
Introdução a Application Life-cycle Management Open Source
Introdução a Application Life-cycle Management Open SourceIntrodução a Application Life-cycle Management Open Source
Introdução a Application Life-cycle Management Open SourceGlobalcode
 
Tutorial de instalação do Maven
Tutorial de instalação do MavenTutorial de instalação do Maven
Tutorial de instalação do MavenAllan Alves
 

Semelhante a Maven Build Profiles (20)

Maven - Aula 05
Maven - Aula 05Maven - Aula 05
Maven - Aula 05
 
Maven - Aula 04
Maven  - Aula 04Maven  - Aula 04
Maven - Aula 04
 
Maven - Aula 01
Maven - Aula 01Maven - Aula 01
Maven - Aula 01
 
Maven - Aula 03
Maven - Aula 03Maven - Aula 03
Maven - Aula 03
 
Introdução a projetos baseados em apache maven
Introdução a projetos baseados em apache mavenIntrodução a projetos baseados em apache maven
Introdução a projetos baseados em apache maven
 
Projetos Java com Maven
Projetos Java com MavenProjetos Java com Maven
Projetos Java com Maven
 
Maven: Introdução
Maven: IntroduçãoMaven: Introdução
Maven: Introdução
 
TDC2011: Java EE 6 & Azure
TDC2011: Java EE 6 & AzureTDC2011: Java EE 6 & Azure
TDC2011: Java EE 6 & Azure
 
Tutorial codeigniter
Tutorial codeigniterTutorial codeigniter
Tutorial codeigniter
 
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse VirgoModularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
Modularidade na Web com Java: Desenvolvimento OSGI Web com Eclipse Virgo
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
 
Quick intro to Apache Maven
Quick intro to Apache MavenQuick intro to Apache Maven
Quick intro to Apache Maven
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
 
Começando com mulesoft e maven
Começando com mulesoft e mavenComeçando com mulesoft e maven
Começando com mulesoft e maven
 
Programação Orientada a Objetos com Java
Programação Orientada a Objetos com JavaProgramação Orientada a Objetos com Java
Programação Orientada a Objetos com Java
 
Testes Funcionais e Estruturais utilizando Selenium IDE e Cobertura
Testes Funcionais e Estruturais utilizando Selenium IDE e CoberturaTestes Funcionais e Estruturais utilizando Selenium IDE e Cobertura
Testes Funcionais e Estruturais utilizando Selenium IDE e Cobertura
 
Solucionando a Teoria do Caos com Cypress.io
Solucionando a Teoria do Caos com Cypress.ioSolucionando a Teoria do Caos com Cypress.io
Solucionando a Teoria do Caos com Cypress.io
 
Aula1
Aula1Aula1
Aula1
 
Introdução a Application Life-cycle Management Open Source
Introdução a Application Life-cycle Management Open SourceIntrodução a Application Life-cycle Management Open Source
Introdução a Application Life-cycle Management Open Source
 
Tutorial de instalação do Maven
Tutorial de instalação do MavenTutorial de instalação do Maven
Tutorial de instalação do Maven
 

Maven Build Profiles

  • 1. Maven - Curso Bá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. 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
  • 21. Ativação de Profiles 21É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
  • 23. Ativação de Profiles 23É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
  • 29. 29Édipo Daniel Aragão - Maven Básico
  • 30. 30Édipo Daniel Aragão - Maven Básico