SlideShare uma empresa Scribd logo
1 de 51
Baixar para ler offline
Maven - Curso Básico
Aula 05 - Ciclos de Vida
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
“Se fiz descobertas valiosas, foi mais por ter paciência do que qualquer outro
talento.” - Isaac Newton
Édipo Daniel Aragão - Maven Básico
POM
4
1. Maven modela projetos conforme descrito no POM.
2. O POM captura a identidade do projeto.
a. O que ele contém;
b. Qual tipo de "empacotamento";
c. Herança;
d. Agregação;
e. Dependências.
3. Podemos pensar no POM como um agrupamento de substantivos.
Édipo Daniel Aragão - Maven Básico
Ciclos de Vida (Life Cycle)?
O que é um ciclo de vida?
5Édipo Daniel Aragão - Maven Básico
Ciclos de Vida (Life Cycle)
6
1. No Maven os verbos são:
goals de plugins, amarrados a fases de um ciclo de vida bem definido.
2. Ciclos de vida são um conjunto fases (phases) bem definidas, executadas
sequencialmente;
3. O Maven é baseado neste conceito de ciclo de vida, o que implica num
processo de build claramente definido.
Édipo Daniel Aragão - Maven Básico
Ciclos de Vida (Life Cycle)
7
1. Seguem alguns exemplos de fases e seus ciclos de vida:
a. prepare-resources ciclo de vida default
b. install ciclo de vida default
c. clean ciclo de vida clean
d. site ciclo de vida site
Édipo Daniel Aragão - Maven Básico
Ciclos de Vida (Life Cycle)
8
“Uma vantagem de ciclos de vida bem definidos, é que você precisa aprender
somente um pequeno conjunto de comandos para executá-los e atingir seus
objetivos.”
Édipo Daniel Aragão - Maven Básico
Ciclos de Vida (Life Cycle)
9
1. Quando você executa no terminal:
a. mvn install
2. Está pedindo ao Maven para:
a. Percorra todas as fases (do ciclo de vida padrão) até install e;
b. Execute todas eventuais goals que essa fase possui.
Édipo Daniel Aragão - Maven Básico
Ciclos de Vida (Life Cycle)
10
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
Ciclos de Vida Clean
11
1. É o ciclo de vida mais simples;
2. Possui três fases:
a. pre-clean;
b. clean;
c. post-clean.
3. Exemplo Sequência:
a. pre-clean → clean → post-clean;
Édipo Daniel Aragão - Maven Básico
Como Checar isso?
12
1. Definição oficial do site da Apache:
https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
Édipo Daniel Aragão - Maven Básico
Ciclos de Vida Clean
13
1. A fase mais interessante deste ciclo de vida é a fase clean.
a. Somente a fase clean, apresenta uma goal associada ao
maven-clean-plugin por padrão:
b. A goal é:
i. clean;
Édipo Daniel Aragão - Maven Básico
Como Checar isso?
14
1. Aqui temos a definição deste ciclo de vida (do maven-core-x.x.x.jar,
META-INF/plexus/components.xml):
2. A definição de uma goal de um plugin não é feito dessa forma num pom.xml.
Este formato é interno ao core do Maven.
Édipo Daniel Aragão - Maven Básico
Porque fases vazias?
15
1. Na fase pre-clean e post-clean nada acontece!
2. As fases vazias podem ser úteis para particularidades de um projeto.
3. Por exemplo, pre-clean:
a. Poderia ser utilizada para fazer backup de arquivos.
Édipo Daniel Aragão - Maven Básico
Exemplo - Fases Clean
16
1. Execute o exemplo “Exemplo - Fases Clean” disponível no moodle e discuta o
que acontece. Teste os comandos:
a. mvn pre-clean;
b. mvn clean;
c. mvn post-clean;
d. Repita os comandos com o parâmetro -X (debug).
Édipo Daniel Aragão - Maven Básico
Ciclo de Vida Default (Build)
17
1. É o ciclo de vida mais utilizado.
2. Possui 23 fases:
a. validate;
b. initialize;
c. generate-sources;
d. process-sources;
e. generate-resources;
f. . . .
3. Exemplo Sequência:
a. validate → initialize → generate-resources → ... ;
Édipo Daniel Aragão - Maven Básico
Ciclo de Vida Default (Build)
18
1. As fases mais conhecidas são:
a. install, compile, package, test;
2. Elas não tem goals de plugins associadas;
a. Goals são definidas pelo tipo de packaging.
3. Exemplos de comandos:
i. mvn compile
ii. mvn package
iii. mvn install
iv. mvn deploy
Édipo Daniel Aragão - Maven Básico
1. Definição oficial do site da Apache:
Ciclo de Vida Default (Build)
19Édipo Daniel Aragão - Maven Básico
1. Definição oficial do site da Apache:
Ciclo de Vida Default (Build)
20Édipo Daniel Aragão - Maven Básico
1. Definição oficial do site da Apache:
Ciclo de Vida Default (Build)
21Édipo Daniel Aragão - Maven Básico
1. Definição oficial do site da Apache:
Ciclo de Vida Default (Build)
22Édipo Daniel Aragão - Maven Básico
Ciclo de Vida Default (Build)
23
1. Aqui temos a definição deste ciclo de
vida (do maven-core-x.x.x.jar,
META-INF/plexus/components.xml):
Édipo Daniel Aragão - Maven Básico
1. O packaging (empacotamento) de projeto afeta o ciclo de vida default;
2. Existem um conjunto de goals diferentes para cada packaging;
3. Lembrando os tipos de packaging padrão:
a. pom;
b. jar;
c. maven-plugin;
d. ejb;
e. ...
Ciclos de Vida Default Específicos
por "Package"
24Édipo Daniel Aragão - Maven Básico
1. É possível adicionar outros packaging associados a devidos plugins;
2. Os plugins e goals utilizados são definidos em:
a. maven-core-x.x.x.jar, META-INF/plexus/default-bindings.xml.
i. Disponível no moodle.
Ciclos de Vida Default Específicos
por "Package"
25Édipo Daniel Aragão - Maven Básico
1. É possível adicionar outros packaging associados a devidos plugins;
2. Os plugins e goals utilizados são definidos em:
a. maven-core-x.x.x.jar, META-INF/plexus/default-bindings.xml.
i. Disponível no moodle.
Ciclos de Vida Default Específicos
por "Package"
26Édipo Daniel Aragão - Maven Básico
Ciclos de Vida Default - JAR
27
1. Definição oficial para o ciclo de vida jar:
Édipo Daniel Aragão - Maven Básico
Ciclos de Vida Default - JAR
28Édipo Daniel Aragão - Maven Básico
Ciclos de Vida Default - POM
29
1. Definição do ciclo de vida pom:
Édipo Daniel Aragão - Maven Básico
Ciclos de Vida Default - POM
30
1. Perceba que a tabela anterior não se aplica;
2. Preciso verificar...
Édipo Daniel Aragão - Maven Básico
Ciclos de Vida Default - WAR
31
1. Definição do ciclo de vida war:
Édipo Daniel Aragão - Maven Básico
Ciclos de Vida Default - WAR
32Édipo Daniel Aragão - Maven Básico
Ciclos de Vida Default - EJB
33
1. Definição do ciclo de vida ejb:
Édipo Daniel Aragão - Maven Básico
Ciclos de Vida Default - EAR
34
1. Definição do ciclo de vida ejb:
Édipo Daniel Aragão - Maven Básico
Reuso de Goals
35
1. Muitas das goals que vimos são compartilhadas entre diferentes ciclos de vida
e phases;
2. Se compararmos o build do "war" e do "jar" somente a goal de packaging
muda.
Édipo Daniel Aragão - Maven Básico
Goal - resources
36
1. A fase de process-resources processa recursos e os copia para o diretório de
saída, através da goal resources.
a. ${basedir}/src/main/resources → ${basedir}/target/classes
2. Permite fazer um filtro nos resources e substituir tokens dentro de um arquivo!
3. Da mesma forma que referenciamos properties no POM com a notação ${...}
podemos fazer nos resources.
Édipo Daniel Aragão - Maven Básico
Exemplo - Filtros
37
1. Execute o exemplo “Exemplo - Filtros” disponível no moodle e discuta o que
acontece. Teste o comando:
a. mvn package;
2. O que acontece com os “test.xml”?
3. O que acontece com “services.xml”?
Édipo Daniel Aragão - Maven Básico
Goal - compile
38
1. A maioria dos ciclos usa a goal compile na fase de compilação;
2. Essa fase chama: compiler:compile;
3. Ela é configurada para compilar todo o código fonte e copiar os bytecode para
o diretório de saída:
a. Por padrão target/classes;
4. O Compiler plugin chama javac sob o diretório de source;
5. Por padrão assume que seus código é java 1.3 e a JVM alvo de execução é
java 1.1;
6. Se quiser mudar isso, é preciso configurar o pom.
Édipo Daniel Aragão - Maven Básico
Goal - compile
39Édipo Daniel Aragão - Maven Básico
Goal - compile
40
1. Perceba que acima configuramos o plugin e não a goal;
2. O plugin compiler é também utilizado para compilar os testes, mas a goal no
caso é compiler:testcompile;
3. Quando configuramos no plugin essa configuração se aplica para todas as
goals;
4. Lembre-se que para configurar diretórios não é por esse plugin, mas
sobrescrevendo a configuração do Super POM:
Édipo Daniel Aragão - Maven Básico
Goal - test-compile
41
1. A fase test-compile é praticamente igual a compile.
2. compiler:testCompile é a goal testCompile do plugin compiler.
3. A diferença? Ela compila os testes!
4. Lembrando que podemos também mudar o diretório dos testes:
Édipo Daniel Aragão - Maven Básico
Goal - test
42
1. Essa goal é direcionada para o plugin surefire, que é o plugin de testes de
unidade padrão do Maven;
2. O plugin basicamente busca tudo com *Test e roda como um JUnit;
3. Também dá suporte a TestNG!
4. Ele roda os testes e gera um report em target/surefire-reports;
a. Cria um xml e um arquivo de texto.
b. Você pode analisar estes arquivos e verificar onde houveram falhas.
5. Ao executar o ciclo de vida site, esse diretório acrescenta dados ao site do
projeto.
Édipo Daniel Aragão - Maven Básico
Goal - test
43
1. Qual o significado de surefire? Infalível!
http://maven.apache.org/surefire/maven-surefire-plugin/
2. O que é o testNG?
a. Ele é um framework de teste também, baseado no JUnit e que tem
algumas features adicionais para facilitar o processo de teste;
http://testng.org/doc/index.html
3. Aqui temos um ponto muito interessante. O surefire cuida de testes de
unidade. E os de integração?
a. No caso é o plugin failsafe, que não vem por padrão configurado. É
preciso adicioná-lo!
b. Ele se amarra automaticamente as fases de test de integração.
Édipo Daniel Aragão - Maven Básico
Goal - test
44
1. No projeto, meu coleguinha commitou um teste falhando!
2. Quero que continue rodando os demais, mas tolerar falhas no build…
3. Como faço?
4. Isso é bastante comum, mas você pode contornar dessa forma:
Édipo Daniel Aragão - Maven Básico
Goal - install
45
1. A fase install chama a goal install do plugin install!
2. Esta goal instala o artefato no repositório local (.m2).
3. Se tiver um projeto com groupId = br.com.edipoaragao
4. E um artefactId = projeto1
5. Ele copiará o artefato para:
a. ~/m2/repository/br/com/edipoaragao/projeto1/projeto1.jar
Édipo Daniel Aragão - Maven Básico
Goal - deploy
46
1. A fase deploy chama a goal deploy do plugin deploy!
2. Mas não um deploy de servidor, "o deploy da aplicação".
3. Instala num repositório remoto o artefato (Nexus ou um Artifactory).
4. Essa configuração pode ser simples ou complexa.
Édipo Daniel Aragão - Maven Básico
Ciclo de Vida Site
47
1. É o ciclo é exclusivo para gerar relatórios e documentação dos projetos;
2. Possui quatro fases:
a. pre-site;
b. site;
c. pos-site;
d. site-deploy.
3. Exemplo Sequência:
a. pre-site → site → pos-site;
Édipo Daniel Aragão - Maven Básico
Ciclo de Vida Site
48
1. As fases mais conhecida: site;
2. 5. A configuração deste ciclo é interessante;
a. Usa-se o mesmo plugin maven-site-plugin para duas fases:
i. site, com goal:
1. site;
ii. site-deploy com a goal:
1. deploy;
Édipo Daniel Aragão - Maven Básico
Ciclo de Vida Site
49
1. As fases mais conhecida: site;
2. 5. A configuração deste ciclo é interessante;
a. Usa-se o mesmo plugin maven-site-plugin para duas fases:
i. site, com goal:
1. site;
ii. site-deploy com a goal:
1. deploy;
Édipo Daniel Aragão - Maven Básico
Ciclo de Vida Site
50
1. Definição oficial do site da Apache:
https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
Édipo Daniel Aragão - Maven Básico
Referencias
51
1. https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
2. http://maven.apache.org/components/ref/3.3.3/maven-core/lifecycles.html#site
_Lifecycle
3. https://maven.apache.org/plugins/maven-site-plugin/
Édipo Daniel Aragão - Maven Básico

Mais conteúdo relacionado

Mais procurados

Apresentação maven
Apresentação mavenApresentação maven
Apresentação mavenAndré Justi
 
Pyramid - O Framework Web para Todos
Pyramid - O Framework Web para TodosPyramid - O Framework Web para Todos
Pyramid - O Framework Web para TodosRuda Filgueiras
 
Maven: Introdução
Maven: IntroduçãoMaven: Introdução
Maven: IntroduçãoJugVale
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosDiego Santos
 
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
 
Simtecce 2011 Integracao Continua
Simtecce 2011 Integracao ContinuaSimtecce 2011 Integracao Continua
Simtecce 2011 Integracao ContinuaPwC
 
Lab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvLab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvPedro Fernandes Vieira
 
UAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao JenkinsUAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao JenkinsStefan Teixeira
 
JBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisJBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisGeorge Gastaldi
 
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANTAutomação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANTelliando dias
 
Testes Funcionais com Selenium
Testes Funcionais com Selenium Testes Funcionais com Selenium
Testes Funcionais com Selenium Mayron Cachina
 
Android DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoAndroid DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoiMasters
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizadosThiago Rodrigues
 

Mais procurados (20)

Apresentação maven
Apresentação mavenApresentação maven
Apresentação maven
 
Aula maven
Aula   mavenAula   maven
Aula maven
 
Maven em 10 minutos
Maven em 10 minutosMaven em 10 minutos
Maven em 10 minutos
 
Apresentacao de Introdução ao Apache Maven
Apresentacao de Introdução ao Apache MavenApresentacao de Introdução ao Apache Maven
Apresentacao de Introdução ao Apache Maven
 
Pyramid - O Framework Web para Todos
Pyramid - O Framework Web para TodosPyramid - O Framework Web para Todos
Pyramid - O Framework Web para Todos
 
Maven
MavenMaven
Maven
 
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
 
Maven: Introdução
Maven: IntroduçãoMaven: Introdução
Maven: Introdução
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizados
 
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 2
Maven 2Maven 2
Maven 2
 
Simtecce 2011 Integracao Continua
Simtecce 2011 Integracao ContinuaSimtecce 2011 Integracao Continua
Simtecce 2011 Integracao Continua
 
Lab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvLab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenv
 
UAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao JenkinsUAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao Jenkins
 
JBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisJBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 Florianópolis
 
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANTAutomação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
 
Testes Funcionais com Selenium
Testes Funcionais com Selenium Testes Funcionais com Selenium
Testes Funcionais com Selenium
 
Android DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoAndroid DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimento
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizados
 
Controle de versão com Git
Controle de versão com GitControle de versão com Git
Controle de versão com Git
 

Semelhante a Maven - Aula 05

Introdução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide WebIntrodução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide WebCícero Quarto
 
Zend Framework 2 é legal ! Mas como ele funciona ?!
Zend Framework 2 é legal ! Mas como ele funciona ?!Zend Framework 2 é legal ! Mas como ele funciona ?!
Zend Framework 2 é legal ! Mas como ele funciona ?!Alefe Variani
 
Projetos Java com Maven
Projetos Java com MavenProjetos Java com Maven
Projetos Java com MavenEdgar Dantas
 
Eclipse user guide
Eclipse user guideEclipse user guide
Eclipse user guideLucas Cruz
 
Curso de CVS - Parte 4 - Avançado
Curso de CVS - Parte 4 - AvançadoCurso de CVS - Parte 4 - Avançado
Curso de CVS - Parte 4 - AvançadoMarden Neubert
 
Tutorial de instalação do Maven
Tutorial de instalação do MavenTutorial de instalação do Maven
Tutorial de instalação do MavenAllan Alves
 
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
 
Trabalhando na Linha de comando
Trabalhando na  Linha de comandoTrabalhando na  Linha de comando
Trabalhando na Linha de comandoSoftD Abreu
 
Maven 3, Sonar e Hudson
Maven 3, Sonar e HudsonMaven 3, Sonar e Hudson
Maven 3, Sonar e HudsonRodrigo Branas
 
Aula 02 Primeiro Cod Java
Aula 02   Primeiro Cod JavaAula 02   Primeiro Cod Java
Aula 02 Primeiro Cod JavaSergio Silva
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 

Semelhante a Maven - Aula 05 (20)

Maven
MavenMaven
Maven
 
01 java fundamentos
01 java fundamentos01 java fundamentos
01 java fundamentos
 
01 introducao ao java
01   introducao ao java01   introducao ao java
01 introducao ao java
 
Introdução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide WebIntrodução aos computadores e à World Wide Web
Introdução aos computadores e à World Wide Web
 
Zend Framework 2 é legal ! Mas como ele funciona ?!
Zend Framework 2 é legal ! Mas como ele funciona ?!Zend Framework 2 é legal ! Mas como ele funciona ?!
Zend Framework 2 é legal ! Mas como ele funciona ?!
 
Java1
Java1Java1
Java1
 
Curso de CVS - Lab 2
Curso de CVS - Lab 2Curso de CVS - Lab 2
Curso de CVS - Lab 2
 
Projetos Java com Maven
Projetos Java com MavenProjetos Java com Maven
Projetos Java com Maven
 
Eclipse user guide
Eclipse user guideEclipse user guide
Eclipse user guide
 
Curso de CVS - Parte 4 - Avançado
Curso de CVS - Parte 4 - AvançadoCurso de CVS - Parte 4 - Avançado
Curso de CVS - Parte 4 - Avançado
 
Tutorial javac
Tutorial javacTutorial javac
Tutorial javac
 
Plugin Maven no Eclipse
Plugin Maven no EclipsePlugin Maven no Eclipse
Plugin Maven no Eclipse
 
Tutorial de instalação do Maven
Tutorial de instalação do MavenTutorial de instalação do Maven
Tutorial de instalação do 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
 
Trabalhando na Linha de comando
Trabalhando na  Linha de comandoTrabalhando na  Linha de comando
Trabalhando na Linha de comando
 
Maven 3, Sonar e Hudson
Maven 3, Sonar e HudsonMaven 3, Sonar e Hudson
Maven 3, Sonar e Hudson
 
Aula 02 Primeiro Cod Java
Aula 02   Primeiro Cod JavaAula 02   Primeiro Cod Java
Aula 02 Primeiro Cod Java
 
1707331929 ltp iv java original
1707331929 ltp iv   java original1707331929 ltp iv   java original
1707331929 ltp iv java original
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
Apache Ant
Apache AntApache Ant
Apache Ant
 

Maven - Aula 05

  • 1. Maven - Curso Básico Aula 05 - Ciclos de Vida
  • 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 “Se fiz descobertas valiosas, foi mais por ter paciência do que qualquer outro talento.” - Isaac Newton Édipo Daniel Aragão - Maven Básico
  • 4. POM 4 1. Maven modela projetos conforme descrito no POM. 2. O POM captura a identidade do projeto. a. O que ele contém; b. Qual tipo de "empacotamento"; c. Herança; d. Agregação; e. Dependências. 3. Podemos pensar no POM como um agrupamento de substantivos. Édipo Daniel Aragão - Maven Básico
  • 5. Ciclos de Vida (Life Cycle)? O que é um ciclo de vida? 5Édipo Daniel Aragão - Maven Básico
  • 6. Ciclos de Vida (Life Cycle) 6 1. No Maven os verbos são: goals de plugins, amarrados a fases de um ciclo de vida bem definido. 2. Ciclos de vida são um conjunto fases (phases) bem definidas, executadas sequencialmente; 3. O Maven é baseado neste conceito de ciclo de vida, o que implica num processo de build claramente definido. Édipo Daniel Aragão - Maven Básico
  • 7. Ciclos de Vida (Life Cycle) 7 1. Seguem alguns exemplos de fases e seus ciclos de vida: a. prepare-resources ciclo de vida default b. install ciclo de vida default c. clean ciclo de vida clean d. site ciclo de vida site Édipo Daniel Aragão - Maven Básico
  • 8. Ciclos de Vida (Life Cycle) 8 “Uma vantagem de ciclos de vida bem definidos, é que você precisa aprender somente um pequeno conjunto de comandos para executá-los e atingir seus objetivos.” Édipo Daniel Aragão - Maven Básico
  • 9. Ciclos de Vida (Life Cycle) 9 1. Quando você executa no terminal: a. mvn install 2. Está pedindo ao Maven para: a. Percorra todas as fases (do ciclo de vida padrão) até install e; b. Execute todas eventuais goals que essa fase possui. Édipo Daniel Aragão - Maven Básico
  • 10. Ciclos de Vida (Life Cycle) 10 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
  • 11. Ciclos de Vida Clean 11 1. É o ciclo de vida mais simples; 2. Possui três fases: a. pre-clean; b. clean; c. post-clean. 3. Exemplo Sequência: a. pre-clean → clean → post-clean; Édipo Daniel Aragão - Maven Básico
  • 12. Como Checar isso? 12 1. Definição oficial do site da Apache: https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html Édipo Daniel Aragão - Maven Básico
  • 13. Ciclos de Vida Clean 13 1. A fase mais interessante deste ciclo de vida é a fase clean. a. Somente a fase clean, apresenta uma goal associada ao maven-clean-plugin por padrão: b. A goal é: i. clean; Édipo Daniel Aragão - Maven Básico
  • 14. Como Checar isso? 14 1. Aqui temos a definição deste ciclo de vida (do maven-core-x.x.x.jar, META-INF/plexus/components.xml): 2. A definição de uma goal de um plugin não é feito dessa forma num pom.xml. Este formato é interno ao core do Maven. Édipo Daniel Aragão - Maven Básico
  • 15. Porque fases vazias? 15 1. Na fase pre-clean e post-clean nada acontece! 2. As fases vazias podem ser úteis para particularidades de um projeto. 3. Por exemplo, pre-clean: a. Poderia ser utilizada para fazer backup de arquivos. Édipo Daniel Aragão - Maven Básico
  • 16. Exemplo - Fases Clean 16 1. Execute o exemplo “Exemplo - Fases Clean” disponível no moodle e discuta o que acontece. Teste os comandos: a. mvn pre-clean; b. mvn clean; c. mvn post-clean; d. Repita os comandos com o parâmetro -X (debug). Édipo Daniel Aragão - Maven Básico
  • 17. Ciclo de Vida Default (Build) 17 1. É o ciclo de vida mais utilizado. 2. Possui 23 fases: a. validate; b. initialize; c. generate-sources; d. process-sources; e. generate-resources; f. . . . 3. Exemplo Sequência: a. validate → initialize → generate-resources → ... ; Édipo Daniel Aragão - Maven Básico
  • 18. Ciclo de Vida Default (Build) 18 1. As fases mais conhecidas são: a. install, compile, package, test; 2. Elas não tem goals de plugins associadas; a. Goals são definidas pelo tipo de packaging. 3. Exemplos de comandos: i. mvn compile ii. mvn package iii. mvn install iv. mvn deploy Édipo Daniel Aragão - Maven Básico
  • 19. 1. Definição oficial do site da Apache: Ciclo de Vida Default (Build) 19Édipo Daniel Aragão - Maven Básico
  • 20. 1. Definição oficial do site da Apache: Ciclo de Vida Default (Build) 20Édipo Daniel Aragão - Maven Básico
  • 21. 1. Definição oficial do site da Apache: Ciclo de Vida Default (Build) 21Édipo Daniel Aragão - Maven Básico
  • 22. 1. Definição oficial do site da Apache: Ciclo de Vida Default (Build) 22Édipo Daniel Aragão - Maven Básico
  • 23. Ciclo de Vida Default (Build) 23 1. Aqui temos a definição deste ciclo de vida (do maven-core-x.x.x.jar, META-INF/plexus/components.xml): Édipo Daniel Aragão - Maven Básico
  • 24. 1. O packaging (empacotamento) de projeto afeta o ciclo de vida default; 2. Existem um conjunto de goals diferentes para cada packaging; 3. Lembrando os tipos de packaging padrão: a. pom; b. jar; c. maven-plugin; d. ejb; e. ... Ciclos de Vida Default Específicos por "Package" 24Édipo Daniel Aragão - Maven Básico
  • 25. 1. É possível adicionar outros packaging associados a devidos plugins; 2. Os plugins e goals utilizados são definidos em: a. maven-core-x.x.x.jar, META-INF/plexus/default-bindings.xml. i. Disponível no moodle. Ciclos de Vida Default Específicos por "Package" 25Édipo Daniel Aragão - Maven Básico
  • 26. 1. É possível adicionar outros packaging associados a devidos plugins; 2. Os plugins e goals utilizados são definidos em: a. maven-core-x.x.x.jar, META-INF/plexus/default-bindings.xml. i. Disponível no moodle. Ciclos de Vida Default Específicos por "Package" 26Édipo Daniel Aragão - Maven Básico
  • 27. Ciclos de Vida Default - JAR 27 1. Definição oficial para o ciclo de vida jar: Édipo Daniel Aragão - Maven Básico
  • 28. Ciclos de Vida Default - JAR 28Édipo Daniel Aragão - Maven Básico
  • 29. Ciclos de Vida Default - POM 29 1. Definição do ciclo de vida pom: Édipo Daniel Aragão - Maven Básico
  • 30. Ciclos de Vida Default - POM 30 1. Perceba que a tabela anterior não se aplica; 2. Preciso verificar... Édipo Daniel Aragão - Maven Básico
  • 31. Ciclos de Vida Default - WAR 31 1. Definição do ciclo de vida war: Édipo Daniel Aragão - Maven Básico
  • 32. Ciclos de Vida Default - WAR 32Édipo Daniel Aragão - Maven Básico
  • 33. Ciclos de Vida Default - EJB 33 1. Definição do ciclo de vida ejb: Édipo Daniel Aragão - Maven Básico
  • 34. Ciclos de Vida Default - EAR 34 1. Definição do ciclo de vida ejb: Édipo Daniel Aragão - Maven Básico
  • 35. Reuso de Goals 35 1. Muitas das goals que vimos são compartilhadas entre diferentes ciclos de vida e phases; 2. Se compararmos o build do "war" e do "jar" somente a goal de packaging muda. Édipo Daniel Aragão - Maven Básico
  • 36. Goal - resources 36 1. A fase de process-resources processa recursos e os copia para o diretório de saída, através da goal resources. a. ${basedir}/src/main/resources → ${basedir}/target/classes 2. Permite fazer um filtro nos resources e substituir tokens dentro de um arquivo! 3. Da mesma forma que referenciamos properties no POM com a notação ${...} podemos fazer nos resources. Édipo Daniel Aragão - Maven Básico
  • 37. Exemplo - Filtros 37 1. Execute o exemplo “Exemplo - Filtros” disponível no moodle e discuta o que acontece. Teste o comando: a. mvn package; 2. O que acontece com os “test.xml”? 3. O que acontece com “services.xml”? Édipo Daniel Aragão - Maven Básico
  • 38. Goal - compile 38 1. A maioria dos ciclos usa a goal compile na fase de compilação; 2. Essa fase chama: compiler:compile; 3. Ela é configurada para compilar todo o código fonte e copiar os bytecode para o diretório de saída: a. Por padrão target/classes; 4. O Compiler plugin chama javac sob o diretório de source; 5. Por padrão assume que seus código é java 1.3 e a JVM alvo de execução é java 1.1; 6. Se quiser mudar isso, é preciso configurar o pom. Édipo Daniel Aragão - Maven Básico
  • 39. Goal - compile 39Édipo Daniel Aragão - Maven Básico
  • 40. Goal - compile 40 1. Perceba que acima configuramos o plugin e não a goal; 2. O plugin compiler é também utilizado para compilar os testes, mas a goal no caso é compiler:testcompile; 3. Quando configuramos no plugin essa configuração se aplica para todas as goals; 4. Lembre-se que para configurar diretórios não é por esse plugin, mas sobrescrevendo a configuração do Super POM: Édipo Daniel Aragão - Maven Básico
  • 41. Goal - test-compile 41 1. A fase test-compile é praticamente igual a compile. 2. compiler:testCompile é a goal testCompile do plugin compiler. 3. A diferença? Ela compila os testes! 4. Lembrando que podemos também mudar o diretório dos testes: Édipo Daniel Aragão - Maven Básico
  • 42. Goal - test 42 1. Essa goal é direcionada para o plugin surefire, que é o plugin de testes de unidade padrão do Maven; 2. O plugin basicamente busca tudo com *Test e roda como um JUnit; 3. Também dá suporte a TestNG! 4. Ele roda os testes e gera um report em target/surefire-reports; a. Cria um xml e um arquivo de texto. b. Você pode analisar estes arquivos e verificar onde houveram falhas. 5. Ao executar o ciclo de vida site, esse diretório acrescenta dados ao site do projeto. Édipo Daniel Aragão - Maven Básico
  • 43. Goal - test 43 1. Qual o significado de surefire? Infalível! http://maven.apache.org/surefire/maven-surefire-plugin/ 2. O que é o testNG? a. Ele é um framework de teste também, baseado no JUnit e que tem algumas features adicionais para facilitar o processo de teste; http://testng.org/doc/index.html 3. Aqui temos um ponto muito interessante. O surefire cuida de testes de unidade. E os de integração? a. No caso é o plugin failsafe, que não vem por padrão configurado. É preciso adicioná-lo! b. Ele se amarra automaticamente as fases de test de integração. Édipo Daniel Aragão - Maven Básico
  • 44. Goal - test 44 1. No projeto, meu coleguinha commitou um teste falhando! 2. Quero que continue rodando os demais, mas tolerar falhas no build… 3. Como faço? 4. Isso é bastante comum, mas você pode contornar dessa forma: Édipo Daniel Aragão - Maven Básico
  • 45. Goal - install 45 1. A fase install chama a goal install do plugin install! 2. Esta goal instala o artefato no repositório local (.m2). 3. Se tiver um projeto com groupId = br.com.edipoaragao 4. E um artefactId = projeto1 5. Ele copiará o artefato para: a. ~/m2/repository/br/com/edipoaragao/projeto1/projeto1.jar Édipo Daniel Aragão - Maven Básico
  • 46. Goal - deploy 46 1. A fase deploy chama a goal deploy do plugin deploy! 2. Mas não um deploy de servidor, "o deploy da aplicação". 3. Instala num repositório remoto o artefato (Nexus ou um Artifactory). 4. Essa configuração pode ser simples ou complexa. Édipo Daniel Aragão - Maven Básico
  • 47. Ciclo de Vida Site 47 1. É o ciclo é exclusivo para gerar relatórios e documentação dos projetos; 2. Possui quatro fases: a. pre-site; b. site; c. pos-site; d. site-deploy. 3. Exemplo Sequência: a. pre-site → site → pos-site; Édipo Daniel Aragão - Maven Básico
  • 48. Ciclo de Vida Site 48 1. As fases mais conhecida: site; 2. 5. A configuração deste ciclo é interessante; a. Usa-se o mesmo plugin maven-site-plugin para duas fases: i. site, com goal: 1. site; ii. site-deploy com a goal: 1. deploy; Édipo Daniel Aragão - Maven Básico
  • 49. Ciclo de Vida Site 49 1. As fases mais conhecida: site; 2. 5. A configuração deste ciclo é interessante; a. Usa-se o mesmo plugin maven-site-plugin para duas fases: i. site, com goal: 1. site; ii. site-deploy com a goal: 1. deploy; Édipo Daniel Aragão - Maven Básico
  • 50. Ciclo de Vida Site 50 1. Definição oficial do site da Apache: https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html Édipo Daniel Aragão - Maven Básico