Prof. AndersonV. de Araújo
 É uma ferramenta de construção,
gerenciamento e compreensão de aplicações
 Também do grupo apache
 Revolucionou o gerenciamento de
dependências em Java
 Não precisamos mais adicionar as bibliotecas
no controle de versão!
 Introduziu o conceito do repositório central
Maven
 Dependency System
 Multi-module builds
 Consistent project structure
 Consistent build model
 Plugin oriented
 Project generated sites
1. Compilar o código-fonte
2. Copiar os recursos
3. Compilar e executar os testes
4. Empacotar o projeto
5. Distribuir (deploy) o projeto
6. Limpar tudo
 Diferentemente do ant, não tem tasks e targets
 Já existem tarefas pré-definidas, chamadas goals, que
são agrupadas por plugins
 Por exemplo, o plugin compiler possui goals:
 compile: compila o código fonte
 testCompile: compila os unit tests
 Pode invocar goal por goal, ou então usar os phases
 Uma phase é composta por uma série de goals pré definidos
 Por exemplo, a fase de package (empacotar) é composta por
compilar, testar e gerar o jar
 Não precisamos escrever nada disso
 Basta declararmos o que o projeto necessita, que o
maven se encarrega do resto
 A grande diferença entre o build.xml do Ant e o pom.xml do
Maven é o paradigma.
 No Ant usamos esse XML praticamente como uma linguagem de
programação, onde você da comandos em relação ao build do
projeto.
 No Maven usamos o XML para definir a estrutura do projeto, e a
partir dessas declarações o Maven possui targets bem definidos
que usam essas informações para saber como realizar aquela
tarefa.
 Exemplo: para compilar com oAnt criamos um target que chama o
javac, mas para compilar com o Maven usamos um target já
existente (não o criamos), e ele vai usar a informação que define
onde está o código fonte e para onde ele deve ser compilado
(sendo que muitas dessas informações possuem convenções e
defaults, e nem precisam ser configuradas)
 Baixar a última versão em
 http://maven.apache.org
 Adicionar a variável de sistema:
M2_HOME, com valor:
C:Program Filesapache-maven-3.1.0
 Adicionar %M2_HOME%/bin ao path do
windows como M2
 Testar rodando mvn --version na linha
de comando
 Vá no eclipse, help, install new software
 All available sites
 Selecione as opções:
 Maven IntegrationWTP
 Maven Integration for Eclipse
 Caso não encontre, adicione o site:
http://download.eclipse.org/technology/m2e/releases
 É o Project Object Model
 Representado pelo arquivo pom.xml
 Ele descreve o projeto / aplicação:
 Nome eVersão
 Tipo do Artifact (jar, war, …)
 Endereço dos códigos-fontes
 Dependências
 Plugins
 Perfis (configurações de build específicas)
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.fatec.maven</groupId>
<artifactId>myshop</artifactId>
<version>1.0</version>
</project>
 modelVersion:Versão do POM
 groupId: pacote da “empresa”
 artifactId: nome do artefato (war, jar, ...)
 version:Versão do artefato
 Ao desenvolver um projeto, precisamos de bibliotecas
externas e o maven para gerenciá-las!
 Ele vai baixar, a partir do repositório central de artefatos:
 o POM de cada biblioteca externa configurada
 o jar de cada biblioteca e de suas dependências,
recursivamente (gerenciamento de bibliotecas transitivo)
 Milhares de artefatos estão cadastrados no repositório
central do maven
 http://www.mvnrepository.com/
 Os jars baixados são armazenados na pasta repository
dentro de M2_HOME
 Se mais de um projeto depende do mesmo jar, ele não é
baixado de novo
 compile: Uma dependência com escopo compile
está disponível em todas as fases. É o valor
padrão
 provided: Quando a biblioteca deve ser usada
para compilar aplicação mas não é distribuída.
Usada quando o servidor de aplicações deverá
prover o JAR
 runtime: Biblioteca não é necessária para a
compilação e sim para a execução (ex. JDBC
drivers)
 test: Somente usadas para compilar e executar
testes (ex. JUnit)
<project>
...
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.2.0.Final</version>
</dependency>
</dependencies>
</project>
 Local:
 É uma pasta em sua máquina (.m2 em %USER_HOME% )
 É criado quando qualquer comando maven for executado pela
primeira vez
 Central:
 Fornecido pela comunidade Maven
 Contém um grande número de bibliotecas comumente
utilizadas
 Quando Maven não encontra qualquer dependência no
repositório local, ele começa a procurar no repositório central
 Necessita da internet e não precisa ser configurado
 Remoto
 Repositórios que podem ser adicionados ao POM quando as
bibliotecas não se encontram no repositório central
 Uma phase é composta por uma série de
goals pré definidos
 Ao executar uma fase, todas as fases
anteriores a ela são chamadas
 Fazem parte do ciclo de build do Maven
 Para executar:
 mvn [phase-name]
 Representa uma tarefa específica que contribui
para a construção e gestão de um projeto
 Pode estar vinculado a zero ou mais fases
 Um goal não vinculado a qualquer fase pode ser
executado fora do ciclo de vida por invocação
direta
 A ordem de execução depende da ordem na qual
o(s) goal(s) e a(s) fase(s) são invocadas
 Por exemplo, considere o comando:
 mvn clean dependency:copy-dependencies
package
 Os argumentos clean e package são fases de construção,
enquanto dependency:copy-dependencies é um goal
 É uma sequência de fases (phases) bem
definidas que definem a ordem em que os
goals devem ser executados
 Aqui uma fase representa um estágio do ciclo
de vida
 validate: valida se o projeto está correto e todas as informações
necessárias estão disponíveis
 compile:compila o código fonte do projeto
 test: executa os testes unitários do código compilado, usando
uma ferramenta de testes unitários, como o junit
 package: empacota o código compilado de acordo com formato
escolhido (JAR,WAR, ...)
 integration-test: processa e faz o deploy do pacote em um
ambiente onde os testes de integração podem ser executados
 verify: executa checagens para verificar se o pacote é válido e
atende aos critérios de qualidade
 install: instala o pacote no repositório local, para ser usado como
dependência de outros projetos locais
 deploy: feito em ambiente de integração ou de release, copia o
pacote final para um repositório remoto para ser compartilhado
entre desenvolvedores e projetos
 O maven possui muitos plugins e goals
diferentes já prontos
 http://maven.apache.org/plugins/
 Fornece um conjunto de goals que podem ser
executados:
 mvn [plugin-name]:[goal-name]
 É possível adicionar outros plugins não
existentes no POM
 clean: Limpa o diretório target e o apaga depois
do build
 compiler: Compilar os códigos Java
 surefile: Executar testes JUnit e criar relatórios
de testes
 jar: Construir JAR
 war: ConstruirWAR
 javadoc: Gerar Javadoc
 antrun: Executar um conjunto de tasks do ant de
qualquer fase mencionada no build
 É um conjunto de valores de configuração que
podem ser usadas para definir ou substituir os
valores padrão de uma construção do Maven
 Por exemplo, o caminho do servidor de banco de
dados no desenvolvimento, teste e ambientes de
produção
 Serve para personalizar a construção para
diferentes ambientes
 Como produção, desenvolvimento, tests, stage, ...
 São especificados no POM usando os elementos
activeProfile e profile
 São acionados de diferentes maneiras
 Tipos:
 Project: Definido no POM do projeto
 User: Definido no settings do Maven
(%USER_HOME%/.m2/settings.xml)
 Global: Definido no settings global do Maven
(%M2_HOME%/conf/settings.xml)
 Ativação:
 Explicitamente usando o console
 Através de configurações do Maven
 Com base em variáveis de ambiente (variáveis usuário /
sistema)
 Configurações de SO (por exemplo, famíliaWindows)
 Presente / faltando arquivos
 É um plugin do Maven que cria um protótipo
(template) de projeto do Maven
 Usado na linha de comando:
 mvn archetype:create
 Só definir o groupID, artifactID, version e o
package referentes ao seu projeto
 Depois disso você terá uma estrutura de projeto
pronta para ser usada
 Exemplo:
 maven-archetype-webapp: Gera um projeto
inicial para web
 archetype:generate
 cria um projeto Maven a partir de um modelo,
guiando o usuário através de um wizard que fará
as configurações necessárias
 archetype:create-from-project
 cria um archetype a partir de um projeto existente.
 archetype:crawl
 busca no repositório por archetypes e atualiza o
catálogo

Maven

  • 1.
  • 2.
     É umaferramenta de construção, gerenciamento e compreensão de aplicações  Também do grupo apache  Revolucionou o gerenciamento de dependências em Java  Não precisamos mais adicionar as bibliotecas no controle de versão!  Introduziu o conceito do repositório central Maven
  • 3.
     Dependency System Multi-module builds  Consistent project structure  Consistent build model  Plugin oriented  Project generated sites
  • 4.
    1. Compilar ocódigo-fonte 2. Copiar os recursos 3. Compilar e executar os testes 4. Empacotar o projeto 5. Distribuir (deploy) o projeto 6. Limpar tudo
  • 5.
     Diferentemente doant, não tem tasks e targets  Já existem tarefas pré-definidas, chamadas goals, que são agrupadas por plugins  Por exemplo, o plugin compiler possui goals:  compile: compila o código fonte  testCompile: compila os unit tests  Pode invocar goal por goal, ou então usar os phases  Uma phase é composta por uma série de goals pré definidos  Por exemplo, a fase de package (empacotar) é composta por compilar, testar e gerar o jar  Não precisamos escrever nada disso  Basta declararmos o que o projeto necessita, que o maven se encarrega do resto
  • 6.
     A grandediferença entre o build.xml do Ant e o pom.xml do Maven é o paradigma.  No Ant usamos esse XML praticamente como uma linguagem de programação, onde você da comandos em relação ao build do projeto.  No Maven usamos o XML para definir a estrutura do projeto, e a partir dessas declarações o Maven possui targets bem definidos que usam essas informações para saber como realizar aquela tarefa.  Exemplo: para compilar com oAnt criamos um target que chama o javac, mas para compilar com o Maven usamos um target já existente (não o criamos), e ele vai usar a informação que define onde está o código fonte e para onde ele deve ser compilado (sendo que muitas dessas informações possuem convenções e defaults, e nem precisam ser configuradas)
  • 7.
     Baixar aúltima versão em  http://maven.apache.org  Adicionar a variável de sistema: M2_HOME, com valor: C:Program Filesapache-maven-3.1.0  Adicionar %M2_HOME%/bin ao path do windows como M2  Testar rodando mvn --version na linha de comando
  • 8.
     Vá noeclipse, help, install new software  All available sites  Selecione as opções:  Maven IntegrationWTP  Maven Integration for Eclipse  Caso não encontre, adicione o site: http://download.eclipse.org/technology/m2e/releases
  • 9.
     É oProject Object Model  Representado pelo arquivo pom.xml  Ele descreve o projeto / aplicação:  Nome eVersão  Tipo do Artifact (jar, war, …)  Endereço dos códigos-fontes  Dependências  Plugins  Perfis (configurações de build específicas)
  • 10.
    <project> <modelVersion>4.0.0</modelVersion> <groupId>org.fatec.maven</groupId> <artifactId>myshop</artifactId> <version>1.0</version> </project>  modelVersion:Versão doPOM  groupId: pacote da “empresa”  artifactId: nome do artefato (war, jar, ...)  version:Versão do artefato
  • 11.
     Ao desenvolverum projeto, precisamos de bibliotecas externas e o maven para gerenciá-las!  Ele vai baixar, a partir do repositório central de artefatos:  o POM de cada biblioteca externa configurada  o jar de cada biblioteca e de suas dependências, recursivamente (gerenciamento de bibliotecas transitivo)  Milhares de artefatos estão cadastrados no repositório central do maven  http://www.mvnrepository.com/  Os jars baixados são armazenados na pasta repository dentro de M2_HOME  Se mais de um projeto depende do mesmo jar, ele não é baixado de novo
  • 12.
     compile: Umadependência com escopo compile está disponível em todas as fases. É o valor padrão  provided: Quando a biblioteca deve ser usada para compilar aplicação mas não é distribuída. Usada quando o servidor de aplicações deverá prover o JAR  runtime: Biblioteca não é necessária para a compilação e sim para a execução (ex. JDBC drivers)  test: Somente usadas para compilar e executar testes (ex. JUnit)
  • 13.
  • 14.
     Local:  Éuma pasta em sua máquina (.m2 em %USER_HOME% )  É criado quando qualquer comando maven for executado pela primeira vez  Central:  Fornecido pela comunidade Maven  Contém um grande número de bibliotecas comumente utilizadas  Quando Maven não encontra qualquer dependência no repositório local, ele começa a procurar no repositório central  Necessita da internet e não precisa ser configurado  Remoto  Repositórios que podem ser adicionados ao POM quando as bibliotecas não se encontram no repositório central
  • 15.
     Uma phaseé composta por uma série de goals pré definidos  Ao executar uma fase, todas as fases anteriores a ela são chamadas  Fazem parte do ciclo de build do Maven  Para executar:  mvn [phase-name]
  • 16.
     Representa umatarefa específica que contribui para a construção e gestão de um projeto  Pode estar vinculado a zero ou mais fases  Um goal não vinculado a qualquer fase pode ser executado fora do ciclo de vida por invocação direta  A ordem de execução depende da ordem na qual o(s) goal(s) e a(s) fase(s) são invocadas  Por exemplo, considere o comando:  mvn clean dependency:copy-dependencies package  Os argumentos clean e package são fases de construção, enquanto dependency:copy-dependencies é um goal
  • 17.
     É umasequência de fases (phases) bem definidas que definem a ordem em que os goals devem ser executados  Aqui uma fase representa um estágio do ciclo de vida
  • 18.
     validate: validase o projeto está correto e todas as informações necessárias estão disponíveis  compile:compila o código fonte do projeto  test: executa os testes unitários do código compilado, usando uma ferramenta de testes unitários, como o junit  package: empacota o código compilado de acordo com formato escolhido (JAR,WAR, ...)  integration-test: processa e faz o deploy do pacote em um ambiente onde os testes de integração podem ser executados  verify: executa checagens para verificar se o pacote é válido e atende aos critérios de qualidade  install: instala o pacote no repositório local, para ser usado como dependência de outros projetos locais  deploy: feito em ambiente de integração ou de release, copia o pacote final para um repositório remoto para ser compartilhado entre desenvolvedores e projetos
  • 19.
     O mavenpossui muitos plugins e goals diferentes já prontos  http://maven.apache.org/plugins/  Fornece um conjunto de goals que podem ser executados:  mvn [plugin-name]:[goal-name]  É possível adicionar outros plugins não existentes no POM
  • 20.
     clean: Limpao diretório target e o apaga depois do build  compiler: Compilar os códigos Java  surefile: Executar testes JUnit e criar relatórios de testes  jar: Construir JAR  war: ConstruirWAR  javadoc: Gerar Javadoc  antrun: Executar um conjunto de tasks do ant de qualquer fase mencionada no build
  • 22.
     É umconjunto de valores de configuração que podem ser usadas para definir ou substituir os valores padrão de uma construção do Maven  Por exemplo, o caminho do servidor de banco de dados no desenvolvimento, teste e ambientes de produção  Serve para personalizar a construção para diferentes ambientes  Como produção, desenvolvimento, tests, stage, ...  São especificados no POM usando os elementos activeProfile e profile  São acionados de diferentes maneiras
  • 23.
     Tipos:  Project:Definido no POM do projeto  User: Definido no settings do Maven (%USER_HOME%/.m2/settings.xml)  Global: Definido no settings global do Maven (%M2_HOME%/conf/settings.xml)  Ativação:  Explicitamente usando o console  Através de configurações do Maven  Com base em variáveis de ambiente (variáveis usuário / sistema)  Configurações de SO (por exemplo, famíliaWindows)  Presente / faltando arquivos
  • 24.
     É umplugin do Maven que cria um protótipo (template) de projeto do Maven  Usado na linha de comando:  mvn archetype:create  Só definir o groupID, artifactID, version e o package referentes ao seu projeto  Depois disso você terá uma estrutura de projeto pronta para ser usada  Exemplo:  maven-archetype-webapp: Gera um projeto inicial para web
  • 25.
     archetype:generate  criaum projeto Maven a partir de um modelo, guiando o usuário através de um wizard que fará as configurações necessárias  archetype:create-from-project  cria um archetype a partir de um projeto existente.  archetype:crawl  busca no repositório por archetypes e atualiza o catálogo