Você está na página 1de 16

14/5/2014 Processo de build com o Maven | blog.caelum.com.

br
http://blog.caelum.com.br/processo-de-build-com-o-maven/ 1/16
O Maven uma ferramenta de gerenciamento, construo e implantao de
projetos muito interessante, que te ajuda no processo de gerenciamento de
dependncias e no de build, gerao de relatrios e de documentao. Na Caelum
esta a ferramenta usada em todos os projetos internos e nas consultorias.
Muitas pessoas migram seus projetos para o Maven, mas acabam arrumando
mais problemas que solues, pois no conseguem configur-lo corretamente, e
acabam desistindo e fazendo tudo na mo, ou voltando para o Ant. Mas se voc
conseguir ajustar as configuraes, o Maven vai te ajudar muito e vai compensar
todos os (poucos) problemas que ele eventualmente causa. No incio do uso do
Maven, espere formar com ele uma relao de amor e dio.

Busca...
Processo de build com o Maven
Postado dia 07/07/2008 por Lucas Cavalcanti em Inovao 26
14/5/2014 Processo de build com o Maven | blog.caelum.com.br
http://blog.caelum.com.br/processo-de-build-com-o-maven/ 2/16
Para comear a usar o Maven, tudo o que voc precisa fazer baix-lo e
configurar umas poucas variveis de ambiente. Depois de ter feito isso, s
digitar mvn [target] na linha de comando. Alguns sistemas operacionais j te
oferecem essa instalao atravs do macport ou apt-get.
A unidade bsica de configurao do Maven um arquivo chamado pom.xml,
que deve ficar na raiz do seu projeto. Ele um arquivo conhecido como Project
Object Model: l voc declara a estrutura, dependncias e caractersticas do seu
projeto. A idia bem parecida com o build.xml do Ant: voc deixa o pom.xml na
raiz do seu projeto para poder chamar as targets de build do seu projeto. O
menor arquivo pom.xml vlido o seguinte:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>br.com.caelum</groupId>
<artifactId>teste</artifactId>
<version>1.0</version>
</project>
Que contm apenas a identificao do projeto, e uma informao a mais:
modelVersion, que a identificao da verso do arquivo pom.xml e deve ser
sempre 4.0.0. A identificao do projeto consiste em trs informaes:
groupId: um identificador da empresa/grupo ao qual o projeto
pertence. Geralmente o nome do site da empresa/grupo ao contrrio.
Ex: br.com.caelum.
artifactId: o nome do projeto. Ex: teste.
version: a verso atual do projeto. Ex: 1.0-SNAPSHOT.
Essas informaes so usadas em muitos lugares, ccomo o controle de
dependncias que , na minha opinio, a funcionalidade mais til do Maven. Por
exemplo, para dizer que o log4j 1.2.15 uma dependncia da sua aplicao s
acrescentar no seu pom as linhas:
<project>
...
14/5/2014 Processo de build com o Maven | blog.caelum.com.br
http://blog.caelum.com.br/processo-de-build-com-o-maven/ 3/16
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
</dependency>
</dependencies>
...
</project>
Quando necessrio, o Maven vai baixar pra voc o jar do log4j 1.2.15, e todas as
suas dependncias, e vai coloc-las no classpath da sua aplicao durante os
builds, testes, etc. Ou seja, voc no precisa mais entrar no site do log4j, baixar
um zip com vrios jars e ter que procurar quais jars devem ser colocados no
classpath! No Repositrio de Bibliotecas do Maven voc encontra os jars que
voc pode colocar como dependncia do seu projeto, e o pedao de xml que voc
deve copiar e colar dentro da tag dependencies do seu pom para incluir essas
bibliotecas.
Todos os jars baixados pelo Maven so guardados na pasta repository dentro
da M2_HOME que voc configurou quando instalou o Maven. Assim, se mais de um
projeto seu depende do mesmo jar, ele no baixado de novo.
A grande diferena entre o build.xml do Ant e o pom.xml do Maven o
paradigma. No Ant usamos esse XML praticamente como uma linguagem de
programao, onde voc da comandos em relao ao build do projeto. No Maven
usamos o XML para definir a estrutura do projeto, e a partir dessas declaraes o
Maven possui targets bem definidos que usam essas informaes para saber
como realizar aquela tarefa. Um exemplo: para compilar com o Ant criamos um
target que chama o javac, mas para compilar com o Maven usamos um target j
existente (no o criamos), e ele vai usar a informao que define onde est o
cdigo fonte e para onde ele deve ser compilado (sendo que muitas dessas
informaes possuem convenes e defaults, e nem precisam ser configuradas).
14/5/2014 Processo de build com o Maven | blog.caelum.com.br
http://blog.caelum.com.br/processo-de-build-com-o-maven/ 4/16
Alm dos principais targets do Maven, voc pode executar targets de plugins.
Voc s precisa digitar na linha de comando:
mvn [nomedoplugin]:[target]
e ento o Maven baixa o plugin, se necessrio, e executa a target pra voc. Existe
uma lista bem grande de plugins do Maven e uma boa parte desses plugins
podem ser usados sem nenhuma configurao adicional no seu pom.
Para dar um exemplo de plugin do Maven nada melhor do que o plugin que cria
um prottipo de projeto do Maven: o Archetype. bem parecido com o scaffold
do Ruby: ele cria um prottipo de projeto a partir de um modelo escolhido. O
jeito mais fcil de usar esse plugin digitando na linha de comando:
mvn archetype:create
E ento o Archetype vai perguntar qual o tipo de projeto que voc deseja, o
groupID, artifactID, version e o pacote referentes ao seu projeto. Depois disso
voc ter uma estrutura de projeto pronta para ser usada.
Por exemplo se voc escolheu o tipo de projeto maven-archetype-quickstart, o
Archetype vai criar uma estrutura de pastas parecidas com a seguinte:
teste
|-- pom.xml
`-- src
|-- main
| `-- java
| `-- br
| `-- com
| `-- caelum
| `-- teste
| `-- App.java
`-- test
`-- java
`-- br
14/5/2014 Processo de build com o Maven | blog.caelum.com.br
http://blog.caelum.com.br/processo-de-build-com-o-maven/ 5/16
`-- com
`-- caelum
`-- teste
`-- AppTest.java
E ento s continuar o seu projeto a partir da. O cdigo de teste j vem
separado do cdigo principal, e o junit j vem como dependncia da aplicao.
Voc tambm pode criar as pastas src/main/resources e
src/test/resources para colocar os recursos (arquivos de configurao, de
teste, e etc) do cdigo principal e do de testes, respectivamente. Tudo que estiver
dentro dessas pastas copiado diretamente para o diretrio onde as classes so
compiladas, sem que seja necessrio fazer nenhuma configurao adicional.
Se voc, por algum motivo, no gostou da estrutura que o Maven criou, ou est
querendo migrar um projeto para o Maven que no segue essa estrutura, voc
pode configurar os diretrios do projeto
acrescentando algumas linhas no pom:
<project>
...
<build>
<sourceDirectory>
${project.basedir}/src/java/main
</sourceDirectory>
<testSourceDirectory>
${project.basedir}/src/java/test
</testSourceDirectory>
<resources>
<resource>
<directory>
${project.basedir}/src/resources/main
</directory>
</resource>
</resources>
<testResources>
14/5/2014 Processo de build com o Maven | blog.caelum.com.br
http://blog.caelum.com.br/processo-de-build-com-o-maven/ 6/16
<testResource>
<directory>
${project.basedir}/src/resources/test
</directory>
</testResource>
</testResources>
</build>
...
</project>
Nesse exemplo o diretrio principal de cdigo e de recursos estaro em
src/java/main e src/resources/main respectivamente, e os diretorios de
teste em src/java/test e src/resources/test.
Agora com um projeto Maven j preparado, vamos para a principal
funcionalidade: o build. O build do Maven baseado no conceito de ciclo de vida:
o processo de construo e distribuio da sua aplicao dividido em partes
bem definidas chamadas fases, seguindo um ciclo. O ciclo padro o seguinte:
compile compila o cdigo fonte do projeto
test executa os testes unitrios do cdigo compilado, usando uma
ferramenta de testes unitrios, como o junit.
package empacota o cdigo compilado de acordo com o
empacotamento escolhido, por exemplo, em JAR.
integration-test processa e faz o deploy do pacote em um
ambiente onde os testes de integrao podem ser rodados.
install instala o pacote no repositrio local, para ser usado como
dependncia de outros projetos locais
deploy feito em ambiente de integrao ou de release, copia o
pacote final para um repositrio remoto para ser compartilhado entre
desenvolvedores e projetos
Voc pode invocar qualquer dessas fases na linha de comando, digitando:
14/5/2014 Processo de build com o Maven | blog.caelum.com.br
http://blog.caelum.com.br/processo-de-build-com-o-maven/ 7/16
mvn [fase]
Por exemplo se voc digitar mvn package o Maven vai executar todas as fases
anteriores do ciclo at a fase package. Uma lista completa das fases do ciclo de
vida possveis pode ser encontrada aqui.
Algumas das fases do ciclo possuem plugins associadas a elas, e esses plugins so
executados assim que a fase chamada para ser executada. Voc pode tambm
registrar plugins para rodarem em qualquer fase do ciclo, conseguindo, assim,
personalizar o build do seu projeto facilmente. Por exemplo, se voc quiser criar
um jar com o cdigo fonte do projeto, e que esse jar seja gerado depois que o
projeto foi empacotado, s acrescentar no seu pom:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
...
</project>
14/5/2014 Processo de build com o Maven | blog.caelum.com.br
http://blog.caelum.com.br/processo-de-build-com-o-maven/ 8/16
Assim, o plugin Source vai executar seu goal jar na fase package do ciclo de
vida. como se fosse chamado mvn source:jar quando o build passa pela fase
de package. A fase package j possui um plugin associado a ela: o jar:jar
(supondo que um projeto jar), ento o plugin source s ser executado depois
do jar:jar. Em geral se voc registrar mais de um plugin pra mesma fase, eles
sero executados na ordem em que eles forem declarados. O jeito de configurar o
plugin para coloc-lo dentro de uma fase do ciclo geralmente est no site
principal do plugin, na seo Usage.
O Maven possui ainda outras funcionalidades interessantes, como gerao de
relatrios. Alguns plugins tambm merecem uma ateno especial, como o
Eclipse que gera informaes de projeto para o eclipse (.classpath e
.project), o Antrun que te permite executar cdigo Ant dentro do Maven, o
Cobertura que gera um relatrio mostrando a cobertura de testes no seu projeto,
o Jetty que sobe uma instncia do Jetty com sua aplicao deployed, o Selenium
que sobe uma instncia do servidor do Selenium para poder fazer os testes de
aceitao do selenium, enfim, existem vrios plugins interessantes e
relativamente fcil achar o plugin que faz o que voc precisa. igualmente fcil,
tambm, fazer um plugin para o Maven, o chamado Mojo.
Aqui na Caelum, alm do Maven e JUnit, usamos muito o Selenium, juntamente
com o SeleniumDSL, para os testes de integrao, e o Cruise Control para o
controle da integrao contnua. Esperamos colocar tutoriais e vdeos sobre
essas ferramentas tambm.
Compartilhe
Tags: ant, build, dependncias, deploy, gerenciamento, integrao contnua, maven,
pom.xml
Facebook Twitter
14/5/2014 Processo de build com o Maven | blog.caelum.com.br
http://blog.caelum.com.br/processo-de-build-com-o-maven/ 9/16
Lucas Cavalcanti
MAIS SOBRE O AUTOR
26 COMENTRIOS

Bruno Andrade
07/07/2008 at 20:46 #
ol lucas,
muito bom o artigo,uma curiosidade como vocs da caelum fazem no dia a dia,
quero dizer usam wtp(eclipse)+maven ou maven e eclipse s para codificar mesmo?
Lucas Cavalcanti
07/07/2008 at 22:40 #
Ol Bruno,
a gente costuma usar o eclipse com wtp e maven Se o seu projeto for web, voc
pode ainda passar um parametro adicional para que o seu projeto vire um projeto
web no eclipse:
mvn eclipse:eclipse -Dwtpversion=2.0
ou mude a verso pra verso do wtp
Fernando Boaglio
08/07/2008 at 01:23 #
14/5/2014 Processo de build com o Maven | blog.caelum.com.br
http://blog.caelum.com.br/processo-de-build-com-o-maven/ 10/16
Bom artigo para introduo ao Maven2, com certeza o seu uso como voc disse, ou
as pessoas adoram ou detestam.
Sugiro tambm alm do link que voc publicou, essa engine de busca:
http://maven.ozacc.com/ e o uso do plugin do eclipse:
http://m2eclipse.codehaus.org/
Diego Carrion
08/07/2008 at 02:06 #
Muito bom o post.
Dennys
08/07/2008 at 13:33 #
Bacana! Ja uso o maven faz algum tempo junto com o Continuum
Vou plugar meu listener aqui para ver quando vai sair algo com o Cruise Control,
Selenium hehehe
Abraos!
mauricio gamarra
08/07/2008 at 14:17 #
Um grande problema que tenho com o maven com eclipse, mesmo usando o
m2eclipse debugar aplicaes web, nunca consegui.
Algum tem alguma dica de como fazer?
Abraos
Lucas Cavalcanti
08/07/2008 at 16:20 #
14/5/2014 Processo de build com o Maven | blog.caelum.com.br
http://blog.caelum.com.br/processo-de-build-com-o-maven/ 11/16
A verso nova do m2eclipse tem uma integrao com o WTP que j transforma o
projeto em projeto web. E o plugin eclipse:eclipse do maven tem uma opo pra
usar o wtp tambm.
s instalar um servidor web no eclipse e fazer o deploy do seu projeto nesse
servidor.
D pra subir o servidor em modo debug Isso deve funcionar
Donizetti
10/07/2008 at 01:50 #
Ola Bruno.Otimo post
So gostaria de perguntar oque o SeleniumDSL ??? =D
Antonio Kantek
12/07/2008 at 18:36 #
Eu gosto muito do Team City. Acho ele um bom competidor para o Cruise Control.
Bruno
14/07/2008 at 14:09 #
Parabns pelo post, muitas vezes o pessoal desanima por ter que apagar incncio e
falta de tempo para artigos gigantes sobre o assunto.
Danilo Torres
17/07/2008 at 13:21 #
Ol todos,
Bom, tenho procurado muitos artigos, fruns sobre o plugin m2eclipse, porm
tenho encontrado uma certa dificuldade em encontrar um bom material, visto que a
grande maioria informa os comandos que devem ser passados para executar as fazer
e tal (inclusive neste artigo por sinal bastante simples e eficiente). Gostaria de
saber se mesmo com o m2eclipse necessrio estar com o cmd aberto para executar
os comandos do maven2
14/5/2014 Processo de build com o Maven | blog.caelum.com.br
http://blog.caelum.com.br/processo-de-build-com-o-maven/ 12/16
valeu!
Lucas Cavalcanti
17/07/2008 at 16:23 #
Ento Danilo, com o plugin m2eclipse s colocar o projeto como gerenciado pelo
plugin e vc provavelmente no vai precisar rodar os targets do maven na mo. Se
mesmo assim voc precisar rodar algum plugin do maven, s ir em Run As >>
Maven build e colocar o target No precisa estar com o cmd aberto
[]s
Luiz
19/07/2008 at 19:00 #
Ol, Lucas!
Pelo que eu sei, o mvn package gera um jar apenas com seu projeto, sem os jars de
que ele depende. Existe algum comando para o maven que gere o jar com as
dependncias inclusas?
Ah! Parabns pelo post! Muito bom!
Lucas Cavalcanti
20/07/2008 at 03:00 #
Ol, Luiz,
existe o plugin shade que cria um uber-jar com as dependncias inclusas nunca
usei, mas deve resolver o problema
[]s
paulo
20/11/2008 at 09:51 #
14/5/2014 Processo de build com o Maven | blog.caelum.com.br
http://blog.caelum.com.br/processo-de-build-com-o-maven/ 13/16
oi, tenho uma dvida parecida com a do luiz (coment 13).
Como fao para rodar um jar gerado pelo maven usando o comando java no
terminal? quando tento fazer isso, estou usando jdbc com mysql, d um erro de
classe no encontrada. o comando mais ou menos java -jar myapp.jar. como fao
para minha aplicao enxergar as dependncias que j foram baixadas para o
repositrio local.
Lucas Cavalcanti
20/11/2008 at 13:58 #
pra rodar o jar, vc precisa colocar todas as dependencias no classpath:
java -classpath -jar myapp.jar
Fred
30/01/2009 at 06:29 #
Tenho utilizado o maven com um amigo nos projetos da empresa em que
trabalhamos e tb tenho utilizado ele em casa nos estudos.
O maven realmente ajuda muito e automatiza muito.
Ontem precisei alterar um jar do tomahawk para uma verso mais nova, ento eu
somente entrei no pom.xml ou na administrao do eclipse e alterei o nmero da
verso. ele automaticamente retirou o antigo arquivo e baixou a verso desejada.
Jos
03/05/2012 at 16:59 #
Ol Lucas, antes de mais nada quero lhe dar os parabns pelo post, muito bom.
Quero te pedir uma ajuda, estou tentando trabalhar com o Maven 3.0.4 e o plugin
M2eclipse, mas estou encotrando problemas, fiz as configuraes e quando tento
criar um projeto no eclipse Maven Project, e tento trabalhar com o maven-
archetype-webapp da o seguinte erro:
14/5/2014 Processo de build com o Maven | blog.caelum.com.br
http://blog.caelum.com.br/processo-de-build-com-o-maven/ 14/16
Could not resolve archetype org.apache.maven.archetypes:maven-archetype-
webapp:RELEASE from any of the configured repositories.
j fiz de tudo pra tentar resolver, mais no consegui, tem como voc me ajudar?
Fabiano Ges
12/09/2012 at 09:43 #
Ol Lucas, ressuscitando esse post sobre Maven, primeiro quer dar parabns pelo
excelente post.
Esse Cruise Control tem o mesmo papel do Hudson??
O que exatamente o Selenium?
Outra coisa: usando o plugin maven/eclipse voc cria o projeto direto no Eclipse ou
cria via cmd e depois importa no eclipse?
Thiago
23/01/2014 at 11:32 #
Ol Lucas, sei que o Post antigo, mas espero que consiga responder minha
dvidas.
J procurei em vrios lugares, tentei entender mas como posso fazer por exemplo,
qdo tenho um problema que possui WebServices e outro com o Backend para Web,
que compartilham POJOS ? Consigo compilar sem ter que duplicar minhas classes ?
E isso eu consigo dentro do Eclipse ?
Obrigado
Tio
17/03/2014 at 09:43 #
Estou comeando a usar o Maven agora e digo que este foi o artigo que mais facilitou
a compreenso e uso dele.
Vlw
14/5/2014 Processo de build com o Maven | blog.caelum.com.br
http://blog.caelum.com.br/processo-de-build-com-o-maven/ 15/16
Nome (Obrigatrio) Email (Obrigatrio) Site
Comentrio
Simeao
30/04/2014 at 12:10 #
Tenho seguinte problema a verso do jar que estou usando superior a que est
disponvel no repositorio do Maven como fao para criar um repositorio local para
essas situaes.
Hugo Bencio
09/05/2014 at 11:13 #
Excelente post! Continue com o bom trabalho!
Cleiton Maciel
09/05/2014 at 13:55 #
Sou iniciando no mundo java, e o que estou vendo do Maven que o sufoco pra
encontrar os jars correto para a plicao acabou uffaa Pelo que entendi ele pega
todas as library que o projeto ir precisar pra funcionar caramba.. que maravilha.
DEIXE UMA RESPOSTA

14/5/2014 Processo de build com o Maven | blog.caelum.com.br


http://blog.caelum.com.br/processo-de-build-com-o-maven/ 16/16
Enviar comentrio
BLOG.CAELUM.COM.BR 2014.