Maven - Curso Básico
Aula 03 - POM - Parte 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
Frase Motivacional
3
“Se quiser derrubar uma árvore na metade do tempo, passe o dobro do tempo
amolando o machado.” - Provérbio Chinês
É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!
4Édipo Daniel Aragão - Maven Básico
Sintaxe do POM
5
O uso do POM te obriga a poucas coisas:
1. Para um projeto você terá um pom.xml;
2. Este pom.xml é definido na base do projeto (raiz do do projeto);
3. Ele é único no contexto daquele projeto;
4. Sub-módulos podem conter seus próprios pom.xml.
Édipo Daniel Aragão - Maven Básico
Versões - Meu Projeto
6
1. Qual versão é mais nova?
a. 1.0.1b
b. 1.2.0b
Édipo Daniel Aragão - Maven Básico
Versões - Meu Projeto
7
1. Seguem o seguinte formato:
.
2. Exemplos:
a. 1.3.5 → major.minor.incremental
b. 5 → major
c. 1.3-beta-01 → major.minor-qualifier
Édipo Daniel Aragão - Maven Básico
Versões - Meu Projeto
8
1. Usada para agrupar e ordenar as releases.
2. Os valores major, minor e incremental são separados por ".".
a. São comparados como números;
3. O qualifier é separado por "-".
a. É tratado como String.
b. Usado para definição de milestones (alpha-01, beta-01, etc.)
Édipo Daniel Aragão - Maven Básico
Versões - Meu Projeto
9
1. Atenção, se não seguir o padrão:
a. "1.0.1b" é uma versão "mais nova" que "1.2.0b";
b. "1.0.1-b" é uma versão "mais antiga" que "1.2.0-b".
2. Atenção com qualifiers:
a. "1.0.1-alpha-2" é uma versão mais nova que "1.0.1-alpha-10";
b. Solução: "1.0.1-alpha-02";
Édipo Daniel Aragão - Maven Básico
Discussão!??
10
1. Existe alguma estratégia de versões no seu projeto?
2. Você sabe o que cada parte corresponde numa versão?
3. Qual a proposta de versão mais lembrada no Brasil?
Versão
Brasileira
Édipo Daniel Aragão - Maven Básico
SNAPSHOT
11
1. SNAPSHOT é um qualificador adicional que indica que o projeto está sob
desenvolvimento;
2. Quando feito um install desse projeto ele expande a versão como um
timestamp:
a. Exemplo: →
3. O Maven irá sempre checar se há uma versão mais nova no repositório;
4. Lembre-se SNAPSHOTS não são estão ativadas por padrão (maven não
buscará no repositório remoto);
5. Seu projeto nunca deve ser encerrado dependendo de um SNAPSHOT;
6. SNAPSHOTs são somente para desenvolvimento!
Édipo Daniel Aragão - Maven Básico
Properties
12
1. Esta é a sintaxe para usar properties:
2. Quando o Maven lê o POM ele substitui as properties.
3. Existem algumas variáveis implícitas que podem ser úteis:
a. env:
i. O env expõe variáveis de ambiente, exemplo caso tenha ${PATH} no
seu terminal definido, poderia usar:
Édipo Daniel Aragão - Maven Básico
Properties
13
1. Existem algumas variáveis implícitas que podem ser úteis:
a. project:
i. O project expõe variáveis do pom, por exemplo:
b. settings:
i. O settings expõe variáveis do Maven, settings.xml.
Por exemplo:
Recupera o valor do elemento offline do arquivo ~/.m2/settings.xml.
Édipo Daniel Aragão - Maven Básico
Properties
14
1. Exemplo:
Édipo Daniel Aragão - Maven Básico
Dependências
15Édipo Daniel Aragão - Maven Básico
Dependências
16
1. O Maven pode gerenciar dependências internas e externas.
2. Algumas dependência externas de um projeto poderiam ser:
a. Jasper Reports;
b. LogBack;
c. Spring Framework;
d. Hibernate;
e. etc.
Édipo Daniel Aragão - Maven Básico
Dependências
17
1. O Maven pode gerenciar dependências internas e externas.
2. Algumas dependências internas de um projeto poderiam ser:
a. meu-projeto-services;
b. meu-projeto-data;
c. meu-projeto-api;
d. etc.
Édipo Daniel Aragão - Maven Básico
Dependências
18Édipo Daniel Aragão - Maven Básico
Dependências - Escopo
19
1. Temos 5 tipos de escopos para dependências no Maven.
2. O scope controla qual dependência estará disponível em cada classpath e
quais são incluídas no artefato.
3. Escopos:
a. compile;
b. provided;
c. runtime;
d. test;
e. system.
Édipo Daniel Aragão - Maven Básico
Dependências - Escopo - compile
20
1. É o escopo default, se o escopo não for definido. Este tipo de escopo inclui a
dependência em todos os classpaths, que implica que, elas vão ser
empacotadas!
Édipo Daniel Aragão - Maven Básico
Dependências - Escopo - provided
21
1. Este tipo de escopo inclui a dependência na hora de compilação (no classpath
de compilação), mas não a inclui no pacote. Ela será provida pela JDK, pelo
Servidor, etc. Por exemplo a Servlet API, não tem sentido estar no seu pacote
war. Ela será oferecida, por exemplo, pelo Tomcat.
Édipo Daniel Aragão - Maven Básico
Dependências - Escopo - runtime
22
1. Este tipo de escopo indica que a dependência é necessária para executar e
testar o sistema, mas ela não entra no classpath de compilação. Exemplo, um
JDBC driver, você só usará a API em desenvolvimento, e o driver na execução.
Édipo Daniel Aragão - Maven Básico
Dependências - Escopo - test
23
1. Este tipo de escopo indica que a dependência somente será utilizada na
compilação e na fase de execução dos testes.
Édipo Daniel Aragão - Maven Básico
Dependências - Escopo - system
24
1. Não recomendada! Este escopo específica um path no sistema local para o
artefato. A dependência será procurada (localmente), o Maven não buscará no
repositório.
Édipo Daniel Aragão - Maven Básico
Continua...
25Édipo Daniel Aragão - Maven Básico

Maven - Aula 03

  • 1.
    Maven - CursoBásico Aula 03 - POM - Parte 2
  • 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 quiserderrubar uma árvore na metade do tempo, passe o dobro do tempo amolando o machado.” - Provérbio Chinês Édipo Daniel Aragão - Maven Básico
  • 4.
    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! 4Édipo Daniel Aragão - Maven Básico
  • 5.
    Sintaxe do POM 5 Ouso do POM te obriga a poucas coisas: 1. Para um projeto você terá um pom.xml; 2. Este pom.xml é definido na base do projeto (raiz do do projeto); 3. Ele é único no contexto daquele projeto; 4. Sub-módulos podem conter seus próprios pom.xml. Édipo Daniel Aragão - Maven Básico
  • 6.
    Versões - MeuProjeto 6 1. Qual versão é mais nova? a. 1.0.1b b. 1.2.0b Édipo Daniel Aragão - Maven Básico
  • 7.
    Versões - MeuProjeto 7 1. Seguem o seguinte formato: . 2. Exemplos: a. 1.3.5 → major.minor.incremental b. 5 → major c. 1.3-beta-01 → major.minor-qualifier Édipo Daniel Aragão - Maven Básico
  • 8.
    Versões - MeuProjeto 8 1. Usada para agrupar e ordenar as releases. 2. Os valores major, minor e incremental são separados por ".". a. São comparados como números; 3. O qualifier é separado por "-". a. É tratado como String. b. Usado para definição de milestones (alpha-01, beta-01, etc.) Édipo Daniel Aragão - Maven Básico
  • 9.
    Versões - MeuProjeto 9 1. Atenção, se não seguir o padrão: a. "1.0.1b" é uma versão "mais nova" que "1.2.0b"; b. "1.0.1-b" é uma versão "mais antiga" que "1.2.0-b". 2. Atenção com qualifiers: a. "1.0.1-alpha-2" é uma versão mais nova que "1.0.1-alpha-10"; b. Solução: "1.0.1-alpha-02"; Édipo Daniel Aragão - Maven Básico
  • 10.
    Discussão!?? 10 1. Existe algumaestratégia de versões no seu projeto? 2. Você sabe o que cada parte corresponde numa versão? 3. Qual a proposta de versão mais lembrada no Brasil? Versão Brasileira Édipo Daniel Aragão - Maven Básico
  • 11.
    SNAPSHOT 11 1. SNAPSHOT éum qualificador adicional que indica que o projeto está sob desenvolvimento; 2. Quando feito um install desse projeto ele expande a versão como um timestamp: a. Exemplo: → 3. O Maven irá sempre checar se há uma versão mais nova no repositório; 4. Lembre-se SNAPSHOTS não são estão ativadas por padrão (maven não buscará no repositório remoto); 5. Seu projeto nunca deve ser encerrado dependendo de um SNAPSHOT; 6. SNAPSHOTs são somente para desenvolvimento! Édipo Daniel Aragão - Maven Básico
  • 12.
    Properties 12 1. Esta éa sintaxe para usar properties: 2. Quando o Maven lê o POM ele substitui as properties. 3. Existem algumas variáveis implícitas que podem ser úteis: a. env: i. O env expõe variáveis de ambiente, exemplo caso tenha ${PATH} no seu terminal definido, poderia usar: Édipo Daniel Aragão - Maven Básico
  • 13.
    Properties 13 1. Existem algumasvariáveis implícitas que podem ser úteis: a. project: i. O project expõe variáveis do pom, por exemplo: b. settings: i. O settings expõe variáveis do Maven, settings.xml. Por exemplo: Recupera o valor do elemento offline do arquivo ~/.m2/settings.xml. Édipo Daniel Aragão - Maven Básico
  • 14.
  • 15.
  • 16.
    Dependências 16 1. O Mavenpode gerenciar dependências internas e externas. 2. Algumas dependência externas de um projeto poderiam ser: a. Jasper Reports; b. LogBack; c. Spring Framework; d. Hibernate; e. etc. Édipo Daniel Aragão - Maven Básico
  • 17.
    Dependências 17 1. O Mavenpode gerenciar dependências internas e externas. 2. Algumas dependências internas de um projeto poderiam ser: a. meu-projeto-services; b. meu-projeto-data; c. meu-projeto-api; d. etc. Édipo Daniel Aragão - Maven Básico
  • 18.
  • 19.
    Dependências - Escopo 19 1.Temos 5 tipos de escopos para dependências no Maven. 2. O scope controla qual dependência estará disponível em cada classpath e quais são incluídas no artefato. 3. Escopos: a. compile; b. provided; c. runtime; d. test; e. system. Édipo Daniel Aragão - Maven Básico
  • 20.
    Dependências - Escopo- compile 20 1. É o escopo default, se o escopo não for definido. Este tipo de escopo inclui a dependência em todos os classpaths, que implica que, elas vão ser empacotadas! Édipo Daniel Aragão - Maven Básico
  • 21.
    Dependências - Escopo- provided 21 1. Este tipo de escopo inclui a dependência na hora de compilação (no classpath de compilação), mas não a inclui no pacote. Ela será provida pela JDK, pelo Servidor, etc. Por exemplo a Servlet API, não tem sentido estar no seu pacote war. Ela será oferecida, por exemplo, pelo Tomcat. Édipo Daniel Aragão - Maven Básico
  • 22.
    Dependências - Escopo- runtime 22 1. Este tipo de escopo indica que a dependência é necessária para executar e testar o sistema, mas ela não entra no classpath de compilação. Exemplo, um JDBC driver, você só usará a API em desenvolvimento, e o driver na execução. Édipo Daniel Aragão - Maven Básico
  • 23.
    Dependências - Escopo- test 23 1. Este tipo de escopo indica que a dependência somente será utilizada na compilação e na fase de execução dos testes. Édipo Daniel Aragão - Maven Básico
  • 24.
    Dependências - Escopo- system 24 1. Não recomendada! Este escopo específica um path no sistema local para o artefato. A dependência será procurada (localmente), o Maven não buscará no repositório. Édipo Daniel Aragão - Maven Básico
  • 25.