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
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