Maven - Curso Básico
Aula 01 - Introdução
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
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
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
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
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
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
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
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
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
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
Quem criou o Maven?
Jason Van Zyl é quem iniciou o projeto Apache Maven!
12Édipo Daniel Aragão - Maven Básico
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
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
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
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
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
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
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
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
Rebel Labs
1. IDE + Build Tool
21Édipo Daniel Aragão - Maven Básico
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
Eu li direito? SBT?
1. Simple Build Tool;
2. Pode ser usada para Java.
23
Rebel Labs
1. Eclipse
24Édipo Daniel Aragão - Maven Básico
Rebel Labs
1. Intellij
25Édipo Daniel Aragão - Maven Básico
Rebel Labs
1. Netbeans
26Édipo Daniel Aragão - Maven Básico
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
Ant
28Édipo Daniel Aragão - Maven Básico
29
Maven
Édipo Daniel Aragão - Maven Básico
30
Maven
Édipo Daniel Aragão - Maven Básico
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
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
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
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
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
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
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
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
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
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
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
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
Testando
~$ mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5;
2015-11-10T14:41:47-02:00)
Maven home: /opt/maven
Java version: 1.8.0_91, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.4.0-28-generic", arch: "amd64",
family: "unix"
43Édipo Daniel Aragão - Maven Básico
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
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
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
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
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
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

Maven - Aula 01

  • 1.
    Maven - CursoBásico Aula 01 - Introdução
  • 2.
    Autor 1. Édipo DanielAragã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 foicriado 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 oMaven? 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 oMaven? 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 oMaven? Jason Van Zyl é quem iniciou o projeto Apache Maven! 12Édipo Daniel Aragão - Maven Básico
  • 13.
    Quem criou oMaven? 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 ahistó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 ConventionOver 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 dePlugins 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 OutrasTools 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. Fezuma 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
  • 21.
    Rebel Labs 1. IDE+ Build Tool 21É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
  • 24.
    Rebel Labs 1. Eclipse 24ÉdipoDaniel Aragão - Maven Básico
  • 25.
    Rebel Labs 1. Intellij 25ÉdipoDaniel Aragão - Maven Básico
  • 26.
    Rebel Labs 1. Netbeans 26ÉdipoDaniel Aragão - Maven Básico
  • 27.
    Apache Maven vsApache 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
  • 28.
  • 29.
  • 30.
  • 31.
    Mas o queacontece? 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ãotem 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. Maventem 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 naSessã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$ sudocp 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 noWindows... 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
  • 43.
    Testando ~$ mvn -v ApacheMaven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T14:41:47-02:00) Maven home: /opt/maven Java version: 1.8.0_91, vendor: Oracle Corporation Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "4.4.0-28-generic", arch: "amd64", family: "unix" 43É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árioe 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árioe 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 issofunciona?! 1. Vamos fazer o build do pom mínimo para garantir que ele funciona! 49Édipo Daniel Aragão - Maven Básico