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 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
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
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
6. 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
7. 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
8. 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
9. 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
10. 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
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 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
16. 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
17. 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
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