Este documento apresenta uma introdução ao curso básico de Maven. Ele contém informações sobre o autor do curso, a agenda planejada, definições e princípios do Maven, além de breves considerações sobre a história e criação da ferramenta.
2. Autor
1. Édipo Daniel Aragão;
2. Entusiasta Tecnológico;
3. Trabalho há 4 anos no Venturus;
4. Professor de Programação na ESAMC;
5. Trabalho há 10 anos com Desenvolvimento de Software;
6. Graduado em Engenharia da Computação (2010) - PUC-Campinas;
7. Pós Graduado em Mineração para Dados Complexos (2016) - Unicamp;
8. E seu guia nesta jornada sobre o Maven!
2Édipo Daniel Aragão - Maven Básico
3. Propostas, Bibliografia etc.
1. Bibliografia
a. Maven The Reference Guide - Sonartype;
b. Maven By Example - Sonartype;
c. Conteúdos diversos da internet.
3Édipo Daniel Aragão - Maven Básico
4. 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;
4Édipo Daniel Aragão - Maven Básico
5. Introdução
“O Maven é uma ferramenta para projetos gerirem e construírem, de forma
eficiente, diversos módulos interdependentes, cada um com bibliotecas que fazem
(eventualmente) uso de centenas de componentes terceiros. Com isso, ele reduziu
a fase de "build management", antes fator relevante no desenvolvimento de
software.”
5Édipo Daniel Aragão - Maven Básico
6. Definição 1
"Maven é uma ferramenta de gestão de projetos que engloba num project object
model (pom), um conjunto de padrões, um ciclo de vida do projeto (life cicle), um
sistema de gerenciamento de dependências, e lógica para a execução (de goals)
de plugins em phases definidas no ciclo de vida. Ao usar o Maven , você descreve
o seu projeto usando project object model (bem definido) e, então o Maven pode
executar sua lógica transversal sobre uma série de plugins."
Mas o que é o Maven?
6Édipo Daniel Aragão - Maven Básico
7. Mas o que é o Maven?
Definição 2
"Conceitualmente, o Apache Maven, ou somente Maven, é uma ferramenta para
simplificar e padronizar processos relacionados a construção (build), publicação
de informações e compartilhamento de projetos de software baseados em Java.1
"
1. Existem plugins que permitem a utilização do Maven com outras linguagens, mas seu propósito inicial
eram projetos Java.
7Édipo Daniel Aragão - Maven Básico
8. Mas o que é o Maven?
1. Build Tool:
Para muitos, o Maven é uma ferramenta de construção (“similar” ao Ant, Make
ou Gradle) que gera um artefato sobre dado código fonte. Um container
abstrato para execução de tarefas de build.
2. Management Tool:
Para alguns, pode-se também atribuir ao Maven a ideia de uma ferramenta de
gestão de projetos uma vez que ele permite fácil controle de versões, inclusão
de informações de projeto, geração de javadocs, páginas de projeto e
artefatos com código fonte.
8Édipo Daniel Aragão - Maven Básico
9. Princípios
O Maven foi criado sob os seguintes princípios:
1. Simplificar o processo de construção de projetos;
2. Simplificar o entendimento da construção de projetos;
3. Tornar uniforme a construção de projetos;
4. Padronizar estrutura de projetos;
5. Potencializar boas práticas de desenvolvimento.
9Édipo Daniel Aragão - Maven Básico
10. Porque usar o Maven?
Seguem algumas das principais motivações para o uso do Maven:
1. Permite que builds possam ser repetidos com pouco ou nenhum esforço em
qualquer ambiente:
a. Um grande problema para quem utilizava o Make (somente Linux) e para quem utiliza o Ant
(que requer ajustes de Script).
2. Gerência dependências da aplicação e suas respectivas dependências
transitivas, uma das maiores razões pelos quais é utilizado:
a. Entende-se dependência como uma biblioteca (um jar file por exemplo) que será utilizado;
b. Dependência transitiva é uma dependência de uma dependência.
10Édipo Daniel Aragão - Maven Básico
11. Porque usar o Maven?
Seguem algumas das principais motivações para o uso do Maven:
1. Oferece integração com as principais IDEs (Eclipse, Netbeans e IntelliJ) além
de ter o mesmo comportamento standalone (em linha de comando);
2. Trabalha com um repositório local, um ponto importante quando começamos a
fazer diversos builds;
3. É uma escolha compatível com a maioria das ferramentas de integração
Jenkins, Cruise Control etc.;
4. Tem disponível uma grande variedade de plugins.
11Édipo Daniel Aragão - Maven Básico
12. Quem criou o Maven?
Jason Van Zyl é quem iniciou o projeto Apache Maven!
12Édipo Daniel Aragão - Maven Básico
13. Quem criou o Maven?
Ele se questionava quanto ao tempo dedicado a infraestrutura do projeto e não ao
desenvolvimento. Jason queria:
1. Um modelo para o projeto;
2. Um lugar onde ele conseguiria ver tudo que é pertinente daquele projeto;
3. Poupar o tempo das pessoas tornando-as aptas a encontrar o que procuram
num mesmo lugar;
4. Uma estrutura de diretórios ideal, em que não seja preciso caçar bibliotecas,
códigos-fonte ou documentos;
5. Ele queria: Convenção sobre Configuração!
13Édipo Daniel Aragão - Maven Básico
14. Quer saber a história completa?
1. Acesse o link e entenda como o Maven surgiu:
https://maven.apache.org/background/history-of-maven.html
"There was no way to easy template Ant builds in those days and every ant
build appeared to be different and I found this incredibly frustrating and futile. I
figured who really cares how the build works so long as it works and is easy to use.
The infrastructure of a project is incredibly important but the value of a project lies
in the application being developed."
14Édipo Daniel Aragão - Maven Básico
15. Convenção Sobre Configuração
Convention Over Configuration.
É um “paradigma”!
Mas o que é um paradigma?
Paradigma é um modelo ou padrão a seguir. Etimologicamente, este termo
tem origem no grego paradeigma que significa modelo ou padrão,
correspondendo a algo que vai servir de modelo ou exemplo a ser seguido
em determinada situação.
15Édipo Daniel Aragão - Maven Básico
16. Convenção Sobre Configuração
1. Sistemas, frameworks, bibliotecas devem assumir valores default (padrão);
2. Maven incorpora este paradigma;
a. Maven tem opiniões que não deveriam ser desafiadas.
3. Sempre há alternativas para definir configurações específicas (flexibilidade
mantida);
4. Um primeiro exemplo, Maven assume que:
${basedir}/src/main/java - contém o código fonte
${basedir}/src/main/resources - contém os resources
${basedir}/src/main/test - contém os testes
${basedir}/target/classes - conterá os byte codes compilados
${basedir}/target/ - conterá um .jar (por padrão)
16Édipo Daniel Aragão - Maven Básico
17. Uma Interface Comum
1. Antes do Maven, cada projeto tinha alguém responsável por gerenciar um
modelo particular de construção de cada projeto;
2. Um desenvolvedor precisava demandar bastante tempo para entender toda a
idiossincrasia do build daquele projeto;
3. A período antes do Maven era de ineficiência, do "Build Engineer";
4. Hoje com Maven você pode simplesmente baixar o projeto e tentar um mvn
install;
5. O Sucesso do Maven se deve a definição de uma interface comum de build.
17Édipo Daniel Aragão - Maven Básico
18. Uso Universal de Plugins
1. Maven foi projetado para delegar a maioria das responsabilidades para
plugins, os quais podem afetar o Maven Lifecycle e oferecer acesso as
goals;
2. A inteligência do Maven vem dos plugins, e eles são obtidos do Maven
Repository;
3. O fato do Maven poder obter plugins e dependências do repositório permite o
reuso universal da lógica de build;
18Édipo Daniel Aragão - Maven Básico
19. Maven e Outras Tools
1. O Maven é uma alternativa (ou vice-versa):
a. Ant + Ivy;
b. Gradle;
c. Buildr.
2. Mas o Maven é muito maior do que essas comparações;
3. O Maven refere-se a muito mais, que a própria ferramenta.
19Édipo Daniel Aragão - Maven Básico
20. Rebel Labs
1. Fez uma pesquisa em 2014, com 2000 desenvolvedores, sobre quais
tecnologias utilizavam. Fonte:
http://zeroturnaround.com/rebellabs/ides-vs-build-tools-how-eclipse-intelli
j-idea-netbeans-users-work-with-maven-ant-sbt-gradle/
2. Seguem alguns dos resultados...
20Édipo Daniel Aragão - Maven Básico
22. Eu li direito? SBT?
1. Ma-oeee!
2. Sim, criado em 2008:
a. Iniciativa de Liminha, Lombard e Ivo Holanda;
b. Última versão: SBT Hebe.
3. Build tool baseada em scripts de novelas Mexicanas!
22Édipo Daniel Aragão - Maven Básico
23. Eu li direito? SBT?
1. Simple Build Tool;
2. Pode ser usada para Java.
23
27. Apache Maven vs Apache Ant
1. Maven vem do hebreu, mēbhīn e significa:
a. Pessoa conhecedora das coisas;
b. Um especialista!
2. Ant quer dizer formiga;
3. Com qual você prefere trabalhar com qual?
27Édipo Daniel Aragão - Maven Básico
31. Mas o que acontece?
Se executar mvn install no terminal, utilizando este pom.xml ele irá:
1. Processar os recursos;
2. Compilar o código fonte;
3. Executar testes de unidade;
4. Criar um jar;
5. Instalar o jar no repositório local.
31Édipo Daniel Aragão - Maven Básico
32. Apache Ant
1. Não tem convenções formais;
2. Ant é procedural:
a. Você precisa dizer ao Ant exatamente o que fazer e quando fazê-lo;
3. Ant não tem um ciclo de vida:
a. Você tem que definir metas e dependências;
b. Você tem que anexar uma sequência de tarefas para cada meta
manualmente.
32Édipo Daniel Aragão - Maven Básico
33. Apache Maven
1. Maven tem convenções:
a. Exemplo, sabe onde seu código-fonte está porque você seguiu a
convenção.
2. Maven é declarativo;
3. Maven tem um ciclo de vida:
a. mvn install evitou que fossem declaradas uma série de comandos.
4. Maven pode executar tarefas do Ant através de um plugin!
33Édipo Daniel Aragão - Maven Básico
34. Download e Versões
1. Maven teve sua primeira release 1.x em Junho de 2007;
2. Atualmente está na versão 3.x;
3. Uso da versão 1.x e 2.x é fortemente desencorajado (cai a mão ☺):
a. Ambos não tem mais suporte!
4. Retrocompatibilidade parcial entre versão 2.x e 3.x;
5. Download: https://maven.apache.org/download.cgi
a. apache-maven-3.3.x-bin.tar.gz
b. apache-maven-3.3.x-bin.zip
34Édipo Daniel Aragão - Maven Básico
35. Download e Versões
1. Alguns detalhes para instalação do Maven em diferentes plataformas,
utilizando boas práticas;
2. Vamos assumir que seu sistema tem uma JDK compatível:
a. É recomendável trabalhar com a versão da JDK mais atualizada possível;
b. Maven 3.0.x → Java ≥ 5;
c. Maven 3.2.x → Java ≥ 6;
d. Maven 3.3.x (latest version) → Java ≥ 7.
Neste link você encontra a versão do Maven e a versão requerida do JDK:
http://maven.apache.org/docs/history.html
35Édipo Daniel Aragão - Maven Básico
36. Verificando o Java
1. java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)
36Édipo Daniel Aragão - Maven Básico
37. Como faço isso?!
~/Downloads$ sudo cp apache-maven-3.3.9-bin.tar.gz /opt/
~/Downloads$ cd /opt/
/opt$ sudo tar -xzf apache-maven-3.3.9-bin.tar.gz
/opt$ sudo rm apache-maven-3.3.9-bin.tar.gz
/opt$ sudo ln -s apache-maven-3.3.9 maven
/opt$ export PATH=/opt/maven/bin:${PATH}
37Édipo Daniel Aragão - Maven Básico
38. Funciona somente na Sessão
~/Downloads$ sudo cp apache-maven-3.3.9-bin.tar.gz /opt/
~/Downloads$ cd /opt/
/opt$ sudo tar -xzf apache-maven-3.3.9-bin.tar.gz
/opt$ sudo rm apache-maven-3.3.9-bin.tar.gz
/opt$ sudo ln -s apache-maven-3.3.9 maven
/opt$ export PATH=/opt/maven/bin:${PATH}
38Édipo Daniel Aragão - Maven Básico
39. Por Usuário
~/Downloads$ sudo cp apache-maven-3.3.9-bin.tar.gz /opt/
~/Downloads$ cd /opt/
/opt$ sudo tar -xzf apache-maven-3.3.9-bin.tar.gz
/opt$ sudo rm apache-maven-3.3.9-bin.tar.gz
/opt$ sudo ln -s apache-maven-3.3.9 maven
/opt$ sudo gedit ~/.profile
Adicione as seguintes linhas ao fim do arquivo:
# Maven
export PATH=/opt/maven/bin:${PATH}
Neste caso utilizamos o .profile, mas eventualmente poderia ser .bash_login.
39Édipo Daniel Aragão - Maven Básico
40. Para Todos Usuários
~/Downloads$ sudo cp apache-maven-3.3.9-bin.tar.gz /opt/
~/Downloads$ cd /opt/
/opt$ sudo tar -xzf apache-maven-3.3.9-bin.tar.gz
/opt$ sudo rm apache-maven-3.3.9-bin.tar.gz
/opt$ sudo ln -s apache-maven-3.3.9 maven
/opt$ sudo gedit /etc/environment
Adicione no final desta linha:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
:/usr/games:/usr/local/games:/opt/maven/bin"
40Édipo Daniel Aragão - Maven Básico
41. Mas porquê no /opt/?
1. Você sabe porquê é instalado no opt?
2. Você pode checar com o comando:
a. $ man hier
3. Ou no seguintes sites:
a. http://www.pathname.com/fhs/
b. http://www.pathname.com/fhs/pub/fhs-2.3.pdf
4. Em geral são instalados pacotes opcionais, fora dos pacotes padrão do
Sistema Operacional.
41Édipo Daniel Aragão - Maven Básico
42. Vamos instalar no Windows...
1. Extrair o conteúdo em c:Program Filesapache-maven-3.3.x;
2. Adicionar através do Painel de Controle nas variáveis de ambiente;
42Édipo Daniel Aragão - Maven Básico
44. Detalhes da Instalação
1. A instalação é bastante pequena, e o Maven irá baixar plugins e dependências
na primeira execução (sob demanda).
/opt$ ls apache-maven-3.3.9 -p1
bin/
boot/
conf/
lib/
LICENSE
NOTICE
44Édipo Daniel Aragão - Maven Básico
45. Detalhes da Instalação
1. LICENSE.txt contém a licença de software para o Apache Maven;
2. NOTICE.txt contém alguns avisos e atribuições necessárias (bibliotecas Maven
que depende);
3. README.txt contém algumas instruções de instalação.
4. bin/ contém o script mvn que executa Maven.
5. boot/ contém um arquivo JAR (classwords - 1.1.jar ), que é responsável pela criação
do Classe Loader em que Maven é executado.
6. conf/ contém um settings.xml global que pode ser utilizado para personalizar o
comportamento da instalação do Maven.
7. Evite mudar esse arquivo, procure usar ~/.m2.
8. lib/ contém um jar que é o núcleo de Maven.
45Édipo Daniel Aragão - Maven Básico
46. Configurações Específicas de
Usuário e Repositório
Ao utilizar Maven ele irá criar um diretório ~/.m2 contendo:
1. ~/.m2/settings.xml:
Configurações específicas do usuário:
a. autenticação
b. repositórios
c. etc.
2. ~/.m2/repository/:
Repositório local do Maven, onde ele armazena cópias de dependências.
46Édipo Daniel Aragão - Maven Básico
47. Configurações Específicas de
Usuário e Repositório
Para atualizar o Maven basta:
1. Remover a versão atual;
2. Substituir por uma versão mais nova;
3. Recriar o link simbólico nos Unix based systems;
4. No caso Microsoft, é preciso atualizar as variáveis de ambiente.
Para remoção basta remover
1. Remover a versão atual;
2. Remover eventuais links e paths nos Unix based systems;
3. Remover das variáveis de ambiente no caso Microsoft.
47Édipo Daniel Aragão - Maven Básico
48. Licença
O Maven está sob a Licença Apache.
Permite:
1. Fazer download livremente, para propósitos pessoais e comerciais.
2. Usar e distribuir em pacotes que você criar.
Não Permite:
1. Redistribuir qualquer software de origem da Apache sem a devida atribuição ;
2. Utilizar marcas de propriedade da Apache Software Foundation de forma que possa indicar ou
sugerir que a Fundação apoia a sua distribuição;
3. Utilizar marcas de propriedade do Apache Software Foundation de forma que possa indicar ou
sugerir que você criou o software Apache em questão.
Requer:
1. Incluir uma cópia da licença em qualquer redistribuição que você pode fazer;
2. Fornecer atribuição clara à Apache Software Foundation para quaisquer distribuições que incluem
seus programas.
48Édipo Daniel Aragão - Maven Básico
49. Será que isso funciona?!
1. Vamos fazer o build do pom mínimo para garantir que ele funciona!
49Édipo Daniel Aragão - Maven Básico