SlideShare uma empresa Scribd logo
1 de 45
Baixar para ler offline
Maven - Curso Básico
Aula 04 - POM - Parte 3
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 melhor maneira de prever o futuro é inventá-lo.” - Tiozão do Bar
Édipo Daniel Aragão - Maven Básico
Alan Kay
4
1. Um dos criadores do Small Talk;
2. Um dos pais da Orientação a Objetos;
3. Pioneiro em propostas de UI;
4. Concebeu o primeiro Laptop;
5. Guitarrista de Jazz!
Édipo Daniel Aragão - Maven Básico
Project Object Model (POM)
O POM é onde um projeto:
1. Tem sua identidade definida;
2. Tem sua estrutura declarada;
3. Tem o build é configurado;
4. É relacionado a outros;
5. Define suas dependências.
O POM define um projeto Maven! É o mapa do projeto!
O POM é declarativo! Descritivo!
5Édipo Daniel Aragão - Maven Básico
Última Aula
1. Versões (Meu Projeto)
2. Properties
3. Dependências, escopo (5 tipos):
1. Compile
2. Provided
3. Runtime
4. Test
5. System
Mais um pouco sobre dependências...
6Édipo Daniel Aragão - Maven Básico
Dependências Opcionais
7
1. A seguir temos um exemplo de um projeto que usa uma dependência
opcional, no caso ele delegará a escolha dessa dependência para um outro
projeto que o use.
Édipo Daniel Aragão - Maven Básico
8Édipo Daniel Aragão - Maven Básico
Dependências Opcionais
9
1. Quando minha-aplicacao inclui o meu-projeto, ele precisa definir qual das
dependências opcionais irá usar. Neste caso seria uma aplicação que poderia
fazer um cache em memória usando ehcache, ou em disco usando
swarmcache.
Édipo Daniel Aragão - Maven Básico
10Édipo Daniel Aragão - Maven Básico
Dependências Opcionais
Dependências - Versões
11
1. Comumente define-se a versão de uma dependência da seguinte forma:
a. Porém existe um risco, o Maven ainda pode buscar uma versão mais
nova…?
Édipo Daniel Aragão - Maven Básico
Dependências - Ranges de Versão
12
1. Podemos especificar ranges para as versões de uma dependência!
2. Não precisamos "amarrar" nossas versões;
3. Temos 2 quantificadores:
a. (, ) → exclusivos;
b. [, ] → inclusivos.
Édipo Daniel Aragão - Maven Básico
Dependências - Ranges de Versão
13
1. 4. [,3.8.1] → Todas dependências não maiores que 3.8.1 ( x <= 3.8.1 )
2. 5. [4.0,) → Todas versões maiores ou igual a 4.0 ( x >= 4.0 )
3. 6. (,2.0) → Qualquer versão menor que 2.0 ( x < 2.0 )
4. 7. [1.2] → Somente a versão 1.2! ( x == 1.2 )
5. 8. [1.2,1.3] → Todas de 1.2 e 1.3 inclusive. ( 1.2 <= x <= 1.3 )
6. 9. [1.2,1.3) → Todas de 1.2 inclusive até 1.3. ( 1.2 <= x < 1.3 )
Édipo Daniel Aragão - Maven Básico
Versões - Exercício 2
14
1. Vamos testar os conceitos com o projeto “Exercicio 2 - Versoes”;
2. Tente construir o “projeto-1”;
3. Faça uma análise do processo de construção.
a. Qual dependência é incluída no processo de compilação?
b. Como você chegou a essa conclusão?
c. Troque a versão do Projeto 3 e 4, inclua [ ], o que acontece? Exemplo:
i. [1.2.0b]
ii. [1.0.1b]
Édipo Daniel Aragão - Maven Básico
Dependências Transitivas
15
1. Um projeto A dependem de um projeto B que depende de um projeto C.
2. O projeto C é considerada uma dependência transitiva de A.
3. Se o projeto C depende do projeto D, o projeto D é também uma
dependência transitiva de A.
4. O Maven (a partir da versão 2) faz a gestão dependências transitivas.
5. O Maven lida com os conflitos:
a. Se dois projeto tem dependências com mesmo groupid e artifactid:
i. Favorece a mais recente.
6. Isso pode causar problemas, e deveremos usar exclusões.
Édipo Daniel Aragão - Maven Básico
Dependências Transitivas e Escopo
16
1. Cada um dos escopos apresentados afeta não somente a disponibilidade da
dependência, mas também sua transitividade.
2. Os escopos no topo da coluna representa o escopo da dependência transitiva.
3. Os escopos na coluna mais à esquerda representa o escopo da dependência direta.
4. A intersecção de linha e coluna é o escopo definido para a dependência transitiva.
5. Uma célula em branco indica que a dependência será omitida.
Édipo Daniel Aragão - Maven Básico
Dependências Transitivas e Escopo
17
1. Exemplo:
a. O Projeto A tem como dependência o Projeto B com scope test.
b. O Projeto B tem como dependência o Projeto C com scope compile.
c. O Projeto C é uma dependência transitiva em A, e terá o scope test.
d. https://maven.apache.org/guides/introduction/introduction-to-dependency
-mechanism.html
Édipo Daniel Aragão - Maven Básico
Resolução de Conflitos
18
1. Haverá momentos em que será preciso excluir dependências transitivas;
2. Quando existe uma dependência que não será utilizada;
3. Quando desejo substituir uma dependência por outra mais conveniente.
Édipo Daniel Aragão - Maven Básico
Excluindo ou Adicionando
19
1. No exemplo acima não queremos a dependências JTA (não está disponível no Maven
Repository). Esta dependência não é aberta, mas faz parte do Hibernate;
2. Substituímos por uma versão alternativa:
Motivos para Excluir e Adicionar
uma Dependência
20
1. Mudança de groupId e artifactId de uma dependência:
a. Acaba gerando duas cópias no projeto;
2. Um artefato não é utilizado no projeto, e você quer reduzir o número de
bibliotecas distribuídas com sua aplicação.
3. Um artefato que é provided e não deveria ser incluso no seu build;
4. Excluir dependências de APIs com múltiplas implementações (Ex. SLF4J);
Édipo Daniel Aragão - Maven Básico
dependencyManagement
21
1. Gestão de dependências pode virar um cenário bastante complexo;
2. Existe o dependencyManagement:
a. É um elemento em geral adicionado a um POM pai.
b. Neste elemento você afeta os filhos sem editar seus POMs.
c. Maven irá seguir a hierarquia pai-filho e usará a versão definida no
dependencyManagement.
Édipo Daniel Aragão - Maven Básico
dependencyManagement
22Édipo Daniel Aragão - Maven Básico
dependencyManagement
23
1. POM Pai:
Édipo Daniel Aragão - Maven Básico
dependencyManagement
24
1. POM Filho:
Édipo Daniel Aragão - Maven Básico
dependencyManagement
25
1. Perceba que o projeto filho não especifica uma versão da dependência;
2. A versão foi definida no pai (no dependencyManagement) e propagada para o
projeto filho;
3. Se o filho definir uma versão ela irá sobrescrever a definição do pai;
4. Se não, usará a do pai (dependencyManagement);
5. Ao contrário da declaração de uma dependência normal:
a. Uma dependência em dependencyManagement não será propagada a
todos os projetos filhos;
b. Somente utilizada para gerenciar a versão.
6. Permite declarar dependências sem definir versões.
Édipo Daniel Aragão - Maven Básico
Relações de um Projeto
26Édipo Daniel Aragão - Maven Básico
Relações de um Projeto
1. Uma das motivações para o uso do Maven é que ele faz o tracking de
dependências (e dependências de dependências) facilmente;
2. Como vimos anteriormente, quando um projeto depende de um artefato
produzido por outro, dizemos que esse outro artefato é uma dependência;
3. Podemos ter dependências externas como um JUnit por exemplo ou mesmo
de outro projeto;
27Édipo Daniel Aragão - Maven Básico
Relações de um Projeto
1. Relações não são somente sobre dependências:
2. Ainda temos Herança (projeto pai) e Agregação (sub-módulos).
3. Se Projeto A tem relação com o Projeto B, Maven é esperto suficiente para
construir B antes de A;
28Édipo Daniel Aragão - Maven Básico
Coordenadas
1. Projetos são relacionados um com outro através de coordenadas (+ | -).
2. Projetos são identificados por:
a. groupId;
b. artifactId;
c. version.
3. A definição dessa tríade é mandatória!
29Édipo Daniel Aragão - Maven Básico
groupId
1. Agrupa um conjunto de artefatos relacionados;
2. Sua definição é similar a de um package;
3. Será convertido numa estrutura de pastas:
a. Ex. br.com.edipoaragao → ~/.m2/repository/br/com/edipoaragao/
30Édipo Daniel Aragão - Maven Básico
artifactId
1. É o principal identificador de um projeto;
2. É o nome deste artefato;
3. Para utilizar este projeto você precisa referenciar este artefactId;
4. Combinação groupId e artifactId precisa ser única.
31Édipo Daniel Aragão - Maven Básico
version
1. Quando um artefato é gerado ele tem um número de versão;
2. Vimos anteriormente as regras para definir uma versão.
32Édipo Daniel Aragão - Maven Básico
type
1. Será visto com maior detalhes na sessão de ciclo de vida;
2. É o formato do empacotamento do Maven;
a. ear
b. jar (default)
c. war
d. pom
i. geralmente utilizado para criar herança
ii. pode ser usado para agrupamento de dependências
e. maven-archetype
f. maven-plugin
33Édipo Daniel Aragão - Maven Básico
Notação de Coordenadas
1. Simplificada:
a. groupId:artifactId:version.
2. Completa
a. groupId:artifactId:classifier:version
34Édipo Daniel Aragão - Maven Básico
Herança
1. Permite que um projeto herde informações de um POM pai;
2. Evita repetição de declarações comuns:
a. Similar a herança do Java.
35Édipo Daniel Aragão - Maven Básico
Herança
36Édipo Daniel Aragão - Maven Básico
Herança
1. Quando um projeto especifica um projeto pai, este projeto pai passa a ser o
ponto de início de leitura do Maven;
2. O projeto herda praticamente tudo, incluindo o artifactId ou groupId e o
version;
3. Se o Projeto B não prover essas informações (sobrescrita seletiva), serão
utilizadas a do pai.
37Édipo Daniel Aragão - Maven Básico
O que é Herdado?
1. Identificadores (ao menos o groupId ou artifactId devem ser sobrescritos);
2. Dependências;
3. Desenvolvedores e Contribuidores;
4. Lista de Plugins;
5. Lista de Reports;
6. Execução de Plugin (execuções com mesmos ids são mergeadas);
7. Configuração de Plugin.
38Édipo Daniel Aragão - Maven Básico
Dependências no Parent POM
1. Quando Maven herda dependências, ele irá adicionar as dependências do
projeto pai ao projeto filho;
1. Isso é interessante para propagar dependências entre vários projeto;
2. Por exemplo, dependência de logging (todos projetos devem usar LogBack).
3. Ou o mesmo plugin para todos os projetos.
39Édipo Daniel Aragão - Maven Básico
Parent POM não Default
1. IMPORTANTE:
a. O Maven irá assumir que o parent POM estará disponível no repositório local, ou
disponibilizado no diretório pai: ../pom.xml do projeto atual;
b. Se nenhuma das situações for verdadeira, por quaisquer motivos, você pode contornar o
problemas, especificando o path do parent pom:
40Édipo Daniel Aragão - Maven Básico
Agregação
1. Num projeto multi-módulo (com agregação) você está simplesmente dizendo
ao projeto que sua construção deve incluir outros módulos específicos.
41Édipo Daniel Aragão - Maven Básico
Agregação
1. Num projeto multi-módulo (com agregação) você está simplesmente dizendo
ao projeto que sua construção deve incluir outros módulos específicos.
42Édipo Daniel Aragão - Maven Básico
Agregação vs. Herança
1. Agregação somente define um build dentro de outro;
2. Herança lida com os aspecto de definições de um projeto, um POM deriva de
outro;
3. Como decidir entre eles?
43Édipo Daniel Aragão - Maven Básico
Agregação vs. Herança
44Édipo Daniel Aragão - Maven Básico
Referências Adicionais
45
1. http://kevinboone.net/classpath.html
2. https://docs.oracle.com/javase/tutorial/essential/environment/paths.html
3. https://maven.apache.org/guides/introduction/introduction-to-dependency-me
chanism.html
Édipo Daniel Aragão - Maven Básico

Mais conteúdo relacionado

Mais procurados

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
 
Simtecce 2011 Integracao Continua
Simtecce 2011 Integracao ContinuaSimtecce 2011 Integracao Continua
Simtecce 2011 Integracao ContinuaPwC
 
JBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisJBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisGeorge Gastaldi
 
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
 
Android DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoAndroid DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoiMasters
 
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
 
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
 
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
 

Mais procurados (20)

Introdução ao maven
Introdução ao mavenIntrodução ao maven
Introdução ao maven
 
Aula maven
Aula   mavenAula   maven
Aula maven
 
Maven em 10 minutos
Maven em 10 minutosMaven em 10 minutos
Maven em 10 minutos
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação maven
 
Pyramid - O Framework Web para Todos
Pyramid - O Framework Web para TodosPyramid - O Framework Web para Todos
Pyramid - O Framework Web para Todos
 
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
 
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
 
Simtecce 2011 Integracao Continua
Simtecce 2011 Integracao ContinuaSimtecce 2011 Integracao Continua
Simtecce 2011 Integracao Continua
 
JBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 FlorianópolisJBoss Forge TDC - 2012 Florianópolis
JBoss Forge TDC - 2012 Florianópolis
 
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 2
Maven 2Maven 2
Maven 2
 
GIT Básico
GIT BásicoGIT Básico
GIT Básico
 
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?
 
Android DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoAndroid DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimento
 
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
 
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
 
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
 
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 Curso Maven POM Parte 3

Projetos Java com Maven
Projetos Java com MavenProjetos Java com Maven
Projetos Java com MavenEdgar Dantas
 
Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!Globalcode
 
Web Training Aula 03: Introduction to Laravel
Web Training Aula 03: Introduction to LaravelWeb Training Aula 03: Introduction to Laravel
Web Training Aula 03: Introduction to LaravelMozDevz
 
Aula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane FidelixAula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane FidelixCris Fidelix
 
Aula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane FidelixAula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane FidelixCris Fidelix
 
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
 
Curso de Java (Parte 5)
Curso de Java (Parte 5)Curso de Java (Parte 5)
Curso de Java (Parte 5)Mario Sergio
 
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
 
Maven Versioning Strategy (VR)
Maven Versioning Strategy (VR)Maven Versioning Strategy (VR)
Maven Versioning Strategy (VR)Marcus Carvalho
 
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
 
ASP.NET 5 MVC Gerenciando dependencias com Nuget, NPM, Gulp e Bower
ASP.NET 5 MVC Gerenciando dependencias com Nuget, NPM, Gulp e BowerASP.NET 5 MVC Gerenciando dependencias com Nuget, NPM, Gulp e Bower
ASP.NET 5 MVC Gerenciando dependencias com Nuget, NPM, Gulp e Bowertdc-globalcode
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java FundamentosWilson Lima
 
Maven 3, Sonar e Hudson
Maven 3, Sonar e HudsonMaven 3, Sonar e Hudson
Maven 3, Sonar e HudsonRodrigo Branas
 

Semelhante a Curso Maven POM Parte 3 (20)

Projetos Java com Maven
Projetos Java com MavenProjetos Java com Maven
Projetos Java com Maven
 
Plugin Maven no Eclipse
Plugin Maven no EclipsePlugin Maven no Eclipse
Plugin Maven no Eclipse
 
01 java fundamentos
01 java fundamentos01 java fundamentos
01 java fundamentos
 
Apache maven
Apache mavenApache maven
Apache maven
 
Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
 
Web Training Aula 03: Introduction to Laravel
Web Training Aula 03: Introduction to LaravelWeb Training Aula 03: Introduction to Laravel
Web Training Aula 03: Introduction to Laravel
 
Mastering Laravel
Mastering LaravelMastering Laravel
Mastering Laravel
 
Aula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane FidelixAula 1 - Java - Prof.ª Cristiane Fidelix
Aula 1 - Java - Prof.ª Cristiane Fidelix
 
Aula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane FidelixAula1- Java PRof.ª Cristiane Fidelix
Aula1- Java PRof.ª Cristiane Fidelix
 
Alm open source
Alm open sourceAlm open source
Alm open source
 
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 ?!
 
Curso de Java (Parte 5)
Curso de Java (Parte 5)Curso de Java (Parte 5)
Curso de Java (Parte 5)
 
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
 
Maven Versioning Strategy (VR)
Maven Versioning Strategy (VR)Maven Versioning Strategy (VR)
Maven Versioning Strategy (VR)
 
Maverick v1.0
Maverick v1.0Maverick v1.0
Maverick v1.0
 
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
 
ASP.NET 5 MVC Gerenciando dependencias com Nuget, NPM, Gulp e Bower
ASP.NET 5 MVC Gerenciando dependencias com Nuget, NPM, Gulp e BowerASP.NET 5 MVC Gerenciando dependencias com Nuget, NPM, Gulp e Bower
ASP.NET 5 MVC Gerenciando dependencias com Nuget, NPM, Gulp e Bower
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
 
Maven 3, Sonar e Hudson
Maven 3, Sonar e HudsonMaven 3, Sonar e Hudson
Maven 3, Sonar e Hudson
 

Curso Maven POM Parte 3

  • 1. Maven - Curso Básico Aula 04 - POM - Parte 3
  • 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 melhor maneira de prever o futuro é inventá-lo.” - Tiozão do Bar Édipo Daniel Aragão - Maven Básico
  • 4. Alan Kay 4 1. Um dos criadores do Small Talk; 2. Um dos pais da Orientação a Objetos; 3. Pioneiro em propostas de UI; 4. Concebeu o primeiro Laptop; 5. Guitarrista de Jazz! Édipo Daniel Aragão - Maven Básico
  • 5. Project Object Model (POM) O POM é onde um projeto: 1. Tem sua identidade definida; 2. Tem sua estrutura declarada; 3. Tem o build é configurado; 4. É relacionado a outros; 5. Define suas dependências. O POM define um projeto Maven! É o mapa do projeto! O POM é declarativo! Descritivo! 5Édipo Daniel Aragão - Maven Básico
  • 6. Última Aula 1. Versões (Meu Projeto) 2. Properties 3. Dependências, escopo (5 tipos): 1. Compile 2. Provided 3. Runtime 4. Test 5. System Mais um pouco sobre dependências... 6Édipo Daniel Aragão - Maven Básico
  • 7. Dependências Opcionais 7 1. A seguir temos um exemplo de um projeto que usa uma dependência opcional, no caso ele delegará a escolha dessa dependência para um outro projeto que o use. Édipo Daniel Aragão - Maven Básico
  • 8. 8Édipo Daniel Aragão - Maven Básico
  • 9. Dependências Opcionais 9 1. Quando minha-aplicacao inclui o meu-projeto, ele precisa definir qual das dependências opcionais irá usar. Neste caso seria uma aplicação que poderia fazer um cache em memória usando ehcache, ou em disco usando swarmcache. Édipo Daniel Aragão - Maven Básico
  • 10. 10Édipo Daniel Aragão - Maven Básico Dependências Opcionais
  • 11. Dependências - Versões 11 1. Comumente define-se a versão de uma dependência da seguinte forma: a. Porém existe um risco, o Maven ainda pode buscar uma versão mais nova…? Édipo Daniel Aragão - Maven Básico
  • 12. Dependências - Ranges de Versão 12 1. Podemos especificar ranges para as versões de uma dependência! 2. Não precisamos "amarrar" nossas versões; 3. Temos 2 quantificadores: a. (, ) → exclusivos; b. [, ] → inclusivos. Édipo Daniel Aragão - Maven Básico
  • 13. Dependências - Ranges de Versão 13 1. 4. [,3.8.1] → Todas dependências não maiores que 3.8.1 ( x <= 3.8.1 ) 2. 5. [4.0,) → Todas versões maiores ou igual a 4.0 ( x >= 4.0 ) 3. 6. (,2.0) → Qualquer versão menor que 2.0 ( x < 2.0 ) 4. 7. [1.2] → Somente a versão 1.2! ( x == 1.2 ) 5. 8. [1.2,1.3] → Todas de 1.2 e 1.3 inclusive. ( 1.2 <= x <= 1.3 ) 6. 9. [1.2,1.3) → Todas de 1.2 inclusive até 1.3. ( 1.2 <= x < 1.3 ) Édipo Daniel Aragão - Maven Básico
  • 14. Versões - Exercício 2 14 1. Vamos testar os conceitos com o projeto “Exercicio 2 - Versoes”; 2. Tente construir o “projeto-1”; 3. Faça uma análise do processo de construção. a. Qual dependência é incluída no processo de compilação? b. Como você chegou a essa conclusão? c. Troque a versão do Projeto 3 e 4, inclua [ ], o que acontece? Exemplo: i. [1.2.0b] ii. [1.0.1b] Édipo Daniel Aragão - Maven Básico
  • 15. Dependências Transitivas 15 1. Um projeto A dependem de um projeto B que depende de um projeto C. 2. O projeto C é considerada uma dependência transitiva de A. 3. Se o projeto C depende do projeto D, o projeto D é também uma dependência transitiva de A. 4. O Maven (a partir da versão 2) faz a gestão dependências transitivas. 5. O Maven lida com os conflitos: a. Se dois projeto tem dependências com mesmo groupid e artifactid: i. Favorece a mais recente. 6. Isso pode causar problemas, e deveremos usar exclusões. Édipo Daniel Aragão - Maven Básico
  • 16. Dependências Transitivas e Escopo 16 1. Cada um dos escopos apresentados afeta não somente a disponibilidade da dependência, mas também sua transitividade. 2. Os escopos no topo da coluna representa o escopo da dependência transitiva. 3. Os escopos na coluna mais à esquerda representa o escopo da dependência direta. 4. A intersecção de linha e coluna é o escopo definido para a dependência transitiva. 5. Uma célula em branco indica que a dependência será omitida. Édipo Daniel Aragão - Maven Básico
  • 17. Dependências Transitivas e Escopo 17 1. Exemplo: a. O Projeto A tem como dependência o Projeto B com scope test. b. O Projeto B tem como dependência o Projeto C com scope compile. c. O Projeto C é uma dependência transitiva em A, e terá o scope test. d. https://maven.apache.org/guides/introduction/introduction-to-dependency -mechanism.html Édipo Daniel Aragão - Maven Básico
  • 18. Resolução de Conflitos 18 1. Haverá momentos em que será preciso excluir dependências transitivas; 2. Quando existe uma dependência que não será utilizada; 3. Quando desejo substituir uma dependência por outra mais conveniente. Édipo Daniel Aragão - Maven Básico
  • 19. Excluindo ou Adicionando 19 1. No exemplo acima não queremos a dependências JTA (não está disponível no Maven Repository). Esta dependência não é aberta, mas faz parte do Hibernate; 2. Substituímos por uma versão alternativa:
  • 20. Motivos para Excluir e Adicionar uma Dependência 20 1. Mudança de groupId e artifactId de uma dependência: a. Acaba gerando duas cópias no projeto; 2. Um artefato não é utilizado no projeto, e você quer reduzir o número de bibliotecas distribuídas com sua aplicação. 3. Um artefato que é provided e não deveria ser incluso no seu build; 4. Excluir dependências de APIs com múltiplas implementações (Ex. SLF4J); Édipo Daniel Aragão - Maven Básico
  • 21. dependencyManagement 21 1. Gestão de dependências pode virar um cenário bastante complexo; 2. Existe o dependencyManagement: a. É um elemento em geral adicionado a um POM pai. b. Neste elemento você afeta os filhos sem editar seus POMs. c. Maven irá seguir a hierarquia pai-filho e usará a versão definida no dependencyManagement. Édipo Daniel Aragão - Maven Básico
  • 23. dependencyManagement 23 1. POM Pai: Édipo Daniel Aragão - Maven Básico
  • 24. dependencyManagement 24 1. POM Filho: Édipo Daniel Aragão - Maven Básico
  • 25. dependencyManagement 25 1. Perceba que o projeto filho não especifica uma versão da dependência; 2. A versão foi definida no pai (no dependencyManagement) e propagada para o projeto filho; 3. Se o filho definir uma versão ela irá sobrescrever a definição do pai; 4. Se não, usará a do pai (dependencyManagement); 5. Ao contrário da declaração de uma dependência normal: a. Uma dependência em dependencyManagement não será propagada a todos os projetos filhos; b. Somente utilizada para gerenciar a versão. 6. Permite declarar dependências sem definir versões. Édipo Daniel Aragão - Maven Básico
  • 26. Relações de um Projeto 26Édipo Daniel Aragão - Maven Básico
  • 27. Relações de um Projeto 1. Uma das motivações para o uso do Maven é que ele faz o tracking de dependências (e dependências de dependências) facilmente; 2. Como vimos anteriormente, quando um projeto depende de um artefato produzido por outro, dizemos que esse outro artefato é uma dependência; 3. Podemos ter dependências externas como um JUnit por exemplo ou mesmo de outro projeto; 27Édipo Daniel Aragão - Maven Básico
  • 28. Relações de um Projeto 1. Relações não são somente sobre dependências: 2. Ainda temos Herança (projeto pai) e Agregação (sub-módulos). 3. Se Projeto A tem relação com o Projeto B, Maven é esperto suficiente para construir B antes de A; 28Édipo Daniel Aragão - Maven Básico
  • 29. Coordenadas 1. Projetos são relacionados um com outro através de coordenadas (+ | -). 2. Projetos são identificados por: a. groupId; b. artifactId; c. version. 3. A definição dessa tríade é mandatória! 29Édipo Daniel Aragão - Maven Básico
  • 30. groupId 1. Agrupa um conjunto de artefatos relacionados; 2. Sua definição é similar a de um package; 3. Será convertido numa estrutura de pastas: a. Ex. br.com.edipoaragao → ~/.m2/repository/br/com/edipoaragao/ 30Édipo Daniel Aragão - Maven Básico
  • 31. artifactId 1. É o principal identificador de um projeto; 2. É o nome deste artefato; 3. Para utilizar este projeto você precisa referenciar este artefactId; 4. Combinação groupId e artifactId precisa ser única. 31Édipo Daniel Aragão - Maven Básico
  • 32. version 1. Quando um artefato é gerado ele tem um número de versão; 2. Vimos anteriormente as regras para definir uma versão. 32Édipo Daniel Aragão - Maven Básico
  • 33. type 1. Será visto com maior detalhes na sessão de ciclo de vida; 2. É o formato do empacotamento do Maven; a. ear b. jar (default) c. war d. pom i. geralmente utilizado para criar herança ii. pode ser usado para agrupamento de dependências e. maven-archetype f. maven-plugin 33Édipo Daniel Aragão - Maven Básico
  • 34. Notação de Coordenadas 1. Simplificada: a. groupId:artifactId:version. 2. Completa a. groupId:artifactId:classifier:version 34Édipo Daniel Aragão - Maven Básico
  • 35. Herança 1. Permite que um projeto herde informações de um POM pai; 2. Evita repetição de declarações comuns: a. Similar a herança do Java. 35Édipo Daniel Aragão - Maven Básico
  • 37. Herança 1. Quando um projeto especifica um projeto pai, este projeto pai passa a ser o ponto de início de leitura do Maven; 2. O projeto herda praticamente tudo, incluindo o artifactId ou groupId e o version; 3. Se o Projeto B não prover essas informações (sobrescrita seletiva), serão utilizadas a do pai. 37Édipo Daniel Aragão - Maven Básico
  • 38. O que é Herdado? 1. Identificadores (ao menos o groupId ou artifactId devem ser sobrescritos); 2. Dependências; 3. Desenvolvedores e Contribuidores; 4. Lista de Plugins; 5. Lista de Reports; 6. Execução de Plugin (execuções com mesmos ids são mergeadas); 7. Configuração de Plugin. 38Édipo Daniel Aragão - Maven Básico
  • 39. Dependências no Parent POM 1. Quando Maven herda dependências, ele irá adicionar as dependências do projeto pai ao projeto filho; 1. Isso é interessante para propagar dependências entre vários projeto; 2. Por exemplo, dependência de logging (todos projetos devem usar LogBack). 3. Ou o mesmo plugin para todos os projetos. 39Édipo Daniel Aragão - Maven Básico
  • 40. Parent POM não Default 1. IMPORTANTE: a. O Maven irá assumir que o parent POM estará disponível no repositório local, ou disponibilizado no diretório pai: ../pom.xml do projeto atual; b. Se nenhuma das situações for verdadeira, por quaisquer motivos, você pode contornar o problemas, especificando o path do parent pom: 40Édipo Daniel Aragão - Maven Básico
  • 41. Agregação 1. Num projeto multi-módulo (com agregação) você está simplesmente dizendo ao projeto que sua construção deve incluir outros módulos específicos. 41Édipo Daniel Aragão - Maven Básico
  • 42. Agregação 1. Num projeto multi-módulo (com agregação) você está simplesmente dizendo ao projeto que sua construção deve incluir outros módulos específicos. 42Édipo Daniel Aragão - Maven Básico
  • 43. Agregação vs. Herança 1. Agregação somente define um build dentro de outro; 2. Herança lida com os aspecto de definições de um projeto, um POM deriva de outro; 3. Como decidir entre eles? 43Édipo Daniel Aragão - Maven Básico
  • 44. Agregação vs. Herança 44Édipo Daniel Aragão - Maven Básico
  • 45. Referências Adicionais 45 1. http://kevinboone.net/classpath.html 2. https://docs.oracle.com/javase/tutorial/essential/environment/paths.html 3. https://maven.apache.org/guides/introduction/introduction-to-dependency-me chanism.html Édipo Daniel Aragão - Maven Básico