You are on page 1of 55

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

1 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

www.devmedia.com.br
[verso para impresso]
Link original: http://www.devmedia.com.br/articles
/viewcomp.asp?comp=25128

Easy Java Magazine 20


[Artigo disponvel no Leitor Digital DevMedia. Clique
aqui para acess-lo]

> Clique aqui para ler todos os artigos da Easy Java


Magazine 20

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

2 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

Ateno: esse artigo tem um vdeo complementar.


Clique e assista!

Do que se trata o artigo:


Este artigo fornece uma breve introduo ferramenta de automao e
gerenciamento de projetos, o Apache Maven, demonstrando o uso de
seus principais comandos e compartilhando dicas de uso.
Em que situao o tema til:
O Apache Maven uma excelente ferramenta de apoio a qualquer

equipe que trabalhe com projetos Java (outras tecnologias tambm so


suportadas), fornecendo aos desenvolvedores uma forma de

automatizar e padronizar a construo e publicao de suas aplicaes.


Resumo DevMan:
O Apache Maven uma ferramenta de automao e gerenciamento de
projetos Java, embora tambm possa ser utilizada com outras

linguagens. Ela fornece s equipes de desenvolvimento uma forma

padronizada de automao, construo e publicao de suas aplicaes,


agregando agilidade e qualidade ao produto final. Por ser

extremamente flexvel, permite que sejam adicionados plugins a si,


para estender suas funcionalidades nativas.

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

3 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

O processo de criao de um projeto Java EE em geral envolve a criao


de um diretrio principal com vrios subdiretrios, a configurao de
diversos arquivos XML, a obteno (via cpia ou download) de

bibliotecas para o projeto e, posteriormente, a execuo dos testes


unitrios, a criao dos pacotes de publicao, a gerao de

documentao javadoc, entre outras etapas. Normalmente, at algum

tempo atrs, cada projeto tinha sua prpria estrutura, seu prprio jeito
de gerar pacotes, de efetuar cada um destes passos. Projetos

complexos, com vrios mdulos, ainda podem precisar que estes sejam

compilados em determinada ordem, para que o pacote final seja criado.


Como se pode imaginar, facilmente isso poderia se tornar um pesadelo
para os projetos em manuteno ou com um desenvolvimento mais

extenso, em equipes que envolvam alguns desenvolvedores, porque as


mudanas estruturais realizadas por um desenvolvedor tm que ser
comunicadas a cada um dos demais colegas, para que o projeto
continue a compilar no computador de cada um. Considere, por

exemplo, que o desenvolvedor A precisou incluir uma biblioteca. Antes


de colocar no controle de verso o cdigo que a utiliza, ele precisaria

avisar a cada um de seus colegas que adicionou algo novo no projeto,


dizer de onde baixar o novo componente (ou pass-lo de computador

em computador) e se assegurar que todos equalizaram seus ambientes


de desenvolvimento, para que o cdigo continue compilando nas

mquinas de seus colegas. Tempos depois, o desenvolvedor B precisa

efetuar uma manuteno no projeto e descobre que uma verso nova


da biblioteca supracitada fornece uma funcionalidade nova, que

facilitar o seu trabalho. Mais uma vez, o ciclo de aviso e cpia do novo

componente comea, com perda de tempo da equipe e correndo o risco


de algum computador ficar desatualizado e um desenvolvedor perder

tempo tentando achar um erro acarretado pelo uso da biblioteca antiga.


Outra situao possvel, em um projeto de vrios mdulos: um

desenvolvedor modifica um dos mdulos bsicos do sistema e no avisa


os demais colegas, ou estes no deram ateno ao e-mail de alerta.

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

4 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

Como resultado o cdigo ou para de compilar ou passa a ter

comportamento instvel, porque o mdulo alterado no foi recompilado


nos computadores do restante da equipe.

Agora, imagine os cenrios acima em uma fbrica de software, em que


o ritmo de trabalho intenso e os prazos impem presso s equipes.

Facilmente podemos prever que bibliotecas sero adicionadas sem que


o restante do time seja avisado, acarretando impedimento de

compilao do cdigo mais recente do projeto. Pessoas modificariam

mdulos e se esqueceriam de avisar as demais para pegarem a verso


mais recente de cdigo e recompilar as alteraes; mudanas no

processo de gerao de pacotes que no so comunicadas, e da em


diante.

Finalmente, se forem consideradas equipes distribudas, com seus

membros trabalhando em home office, a complexidade de propagar


mudanas estruturais do projeto aumenta muito. Nesses casos, at

mesmo iniciar o projeto podia trazer muitas dores de cabea, at toda a


equipe conseguir estabilizar o ambiente de desenvolvimento de cada
participante.

Visando solucionar estes e outros problemas, algumas ferramentas

foram desenvolvidas para ajudar na organizao dos projetos e foram


bem sucedidas em seu intento, sendo a mais famosa delas o Apache

Ant. O trabalho manual diminuiu bastante, mas ainda havia questes

pendentes, como a distribuio de bibliotecas entre a equipe, falta de


aderncia a um padro estrutural nico entre os projetos, uma forma
padronizada de compilar e gerar pacotes, entre outras. Outro ponto
importante era a necessidade de configurar minuciosamente essas

ferramentas a partir de arquivos de configurao, o que gerava certo


trabalho tanto na criao quanto na evoluo do projeto.

O Maven surgiu, ento, como uma melhoria das ferramentas existentes


e tambm como uma resposta para as demais questes. Neste artigo,

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

5 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

veremos como o Maven faz isso, atravs de um exemplo prtico e muito


simples, cujas instrues de criao, com poucas adaptaes, podero
ser usadas como base para a maioria dos seus projetos.

Em seu cerne, o Maven uma ferramenta de gerenciamento e

automao de construo (build) de projetos. Entretanto, por fornecer


diversas funcionalidades adicionais atravs do uso de plugins e
estimular o emprego de melhores prticas de organizao,

desenvolvimento e manuteno de projetos, muito mais do que


apenas uma ferramenta auxiliar.

Um desenvolvedor que seja alocado em um projeto Java EE que utilize


o Maven corretamente no ter que saber de imediato quais

dependncias (bibliotecas) o projeto necessita para compilar e executar,


no precisar descobrir onde obt-las e nem ir se preocupar em como
realizar a construo do pacote do aplicativo. Com um comando

simples, como mvn install, na raiz do cdigo-fonte do projeto, instruir


o Maven a gerar o cdigo extra necessrio (cliente de um web service,
por exemplo), validar e compilar o projeto, test-lo atravs de seus

testes unitrios e gerar o pacote com o cdigo compilado. Outras etapas


poderiam incluir auditoria de qualidade de cdigo, documentao,
gerao de estatsticas, entre diversas possibilidades.

Outra caracterstica do Maven estimular a adoo de boas prticas,


porque uma das formas utilizadas por ele para reduzir o esforo de

configurao do projeto a utilizao do conceito de programao por


conveno (do ingls convention over configuration), em que a

ferramenta assume que o seu usurio far as coisas da forma como ela
preconiza como ideais (estrutura de diretrios padro, por exemplo), e
o livra de ter que declarar algo que se repetir em todo projeto. Ao
incorporar as prticas aceitas pela comunidade Java como as mais
indicadas para projetos Java EE, o Maven acaba no s

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

6 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

disseminando-as para novos desenvolvedores, como tambm as

padroniza entre os projetos em que ele empregado, permitindo que

novatos se localizem muito mais rapidamente dentro de projetos novos.


Obviamente, pode-se definir manualmente o que assumido como

padro, ao preo do aumento na carga de trabalho para a configurao


inicial do projeto.

O Maven hoje fornece suporte a outras tecnologias, inclusive .NET,


mas neste artigo focaremos somente nos projetos Java EE.

A instalao do Maven bastante simples. Neste artigo, usaremos o


Windows, porm estes podem ser facilmente adaptados para outros
sistemas operacionais.

O nico pr-requisito para a instalao do Maven ter o Java


Development Kit (JDK) instalado, que pode ser obtido em

www.oracle.com/us/technologies/java/, caso necessrio. A verso do


JDK utilizada para este artigo ser a 1.6.0_20.

O Maven propriamente dito disponibilizado pela Apache Software


Foundation em formato de arquivo compactado no endereo

http://maven.apache.org/download.html, de onde baixaremos o

arquivo zip. O artigo adotar como base a verso estvel mais recente
durante a sua escrita, a 3.0.4.

Aps a concluso do download, o arquivo deve ser descompactado em


um diretrio. Por uma questo de comodidade e padronizao,

recomenda-se que o nome deste diretrio fique no formato maven[verso]. Utilizando a nossa verso como exemplo, o nome que

sugerimos maven-3.0.4. Alm disso, tambm aconselhvel que no


haja espaos em nenhuma parte do nome fsico completo da

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

7 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

ferramenta. Com isso em mente, colocaremos o contedo do arquivo


compactado no diretrio D:\maven-3.0.4.

A prxima etapa a criao de duas variveis de ambiente no sistema


operacional: JAVA_HOME e M2_HOME. A primeira indica a localizao
do diretrio do JDK, e a segunda representa o mesmo para o Maven.
Tambm necessrio acrescentar ao contedo da varivel Path do
sistema a pasta bin do Maven, conforme as Figuras 1, 2 e 3.

Figura 1. Varivel de ambiente que aponta para a localizao do JDK


no sistema operacional.

Figura 2. Varivel de ambiente que aponta para a localizao do Maven


no sistema operacional.

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

8 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

Figura 3. Incluso da pasta bin do Maven no Path do sistema


operacional.

Para testar se a instalao foi realizada com sucesso, basta

executarmos o comando mvn -version na linha de comando, conforme


indica a Listagem 1.

Listagem 1. Teste de instalao do Maven.


D:\>mvn -version

Apache Maven 3.0.4 (r1232337; 2012-01-17 06:44:56-0200)


Maven home: D:\maven-3.0.4

Java version: 1.6.0_20, vendor: Sun Microsystems Inc.

Java home: C:\Program Files (x86)\Java\jdk1.6.0_20\jre


Default locale: pt_BR, platform encoding: Cp1252

OS name: "windows vista", version: "6.0", arch: "x86", family: "windows"

Se ocorrer algum erro nesta etapa, devemos verificar se os passos

anteriores foram realizados e se as variveis apontam para os devidos


lugares.

O Maven prov uma excelente funcionalidade de criao automtica de


projetos atravs de arqutipos. Os arqutipos so esqueletos que

podem ser usados como base para projetos. Muitas vezes, criar um

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

9 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

projeto Java EE do zero um trabalho maante, porque se deve gerar


uma estrutura de diretrios, vrios arquivos XML de configurao,

definio de bibliotecas, e outros passos que podem (e devem!) ser

automatizados. Com o uso de arqutipos, o Maven pode ser instrudo a


criar toda a estrutura necessria para se comear a desenvolver
projetos dos mais diversos tipos, agilizando e muito o incio do
desenvolvimento.

Para nosso exemplo, criaremos um projeto utilizando o arqutipo mais


simples, para analisarmos a estrutura que o Maven gera.

Dentro do diretrio onde se deseja criar o projeto, executaremos o

comando do Maven que nos permite manipular seus arqutipos. Se no


receber parmetros, o comando lista todos os arqutipos existentes

para escolha do usurio. Neste artigo, optamos por utilizar como base
para nossa demonstrao o diretrio D:\projetos, e sugerimos que o

leitor faa o mesmo, para facilitar o acompanhamento dos exemplos.


Doravante, nossos exemplos iro se referenciar a este diretrio.

No prompt de comando, acesse o diretrio onde deseja criar o projeto

(cd projetos). Em seguida, digitando mvn archetype:generate, o Maven


listar os arqutipos disponveis, como exibido na Listagem 2.
Listagem 2. Listagem dos arqutipos.
[INFO] Scanning for projects...
[INFO]

[INFO] -----------------------------------------------------------------------[INFO] Building Maven Stub Project (No POM) 1

[INFO] -----------------------------------------------------------------------[INFO]

[INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom >>


[INFO]

[INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom <<


[INFO]

[INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom -[INFO] Generating project in Interactive mode

[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

10 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

Choose archetype:

1: remote -> com.agilejava.docbkx:docbkx-quickstart-archetype (-)


(...)

186: remote -> org.apache.maven.archetypes:maven-archetype-quickstart (An archet


(...)

566: remote -> se.vgregion.javg.maven.archetypes:javg-minimal-archetype (-)

Choose a number or apply filter (format: [groupId:]artifactId, case sensitive co

Caso esta seja a primeira vez em que este comando esteja sendo

executado, o Maven ir baixar os plugins que necessita para gerar a

listagem de arqutipos. Este mesmo procedimento acontecer cada vez

que o usurio invocar uma funo do Maven pela primeira vez, porque a

ferramenta possui inteligncia para acrescentar funcionalidades a si, por


meio do download de plugins adicionais. Falaremos mais sobre plugins
mais a frente.

Ao final da listagem, o Maven solicitar o nmero correspondente ao

arqutipo de projeto a ser criado, sugerindo como padro o arqutipo

bsico maven-archetype-quickstart, nmero 186, que utilizaremos. Vale


ressaltar que a lista de arqutipos pode sofrer atualizaes com o

tempo, de modo que o nmero do arqutipo bsico pode mudar. Em

caso de dvida, devemos aceitar o padro sugerido pela ferramenta.


Depois de selecionarmos o arqutipo, escolhemos sua verso, sendo o
padro a mais recente, 1.1, que ser nossa escolha.

O prximo passo fornecermos os valores de groupId, artifactId,


version e package.

GroupId o nome que ser usado como ponto de partida da hierarquia


(grupo) do projeto no repositrio Maven. Comumente assume o nome
do pacote principal. Informaremos br.com.sosimple como groupId.

ArtifactId o nome do projeto em si. Utilizaremos javaMagazine para

este campo. Version simplesmente a verso do seu projeto, o que

muito importante medida que o projeto amadurece e novas verses

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

11 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

so lanadas. Pode-se usar o valor padro sugerido, 1.0-snapshot. O


Maven utiliza essas trs informaes para definir a identidade de um
artefato em particular, seja ele um projeto ou uma dependncia. Por
fim, package o nome do pacote principal, que ser

br.com.sosimple.javaMagazine no nosso caso. Aps entrarmos esses

valores, basta confirmarmos com Y e verificar o resultado. A Listagem


3 mostra as escolhas que fizemos para nosso projeto.
Listagem 3. Definies do nosso projeto.
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1

Choose a number: 6:

Define value for property 'groupId': : br.com.sosimple


Define value for property 'artifactId': : javaMagazine
Define value for property 'version':
Define value for property 'package':
Confirm properties configuration:

1.0-SNAPSHOT: :

br.com.sosimple: : br.com.sosimple.javaMag

groupId: br.com.sosimple
artifactId: javaMagazine
version: 1.0-SNAPSHOT

package: br.com.sosimple.javaMagazine
Y: : y

[INFO] -------------------------------------------------------------------------

[INFO] Using following parameters for creating project from Old (1.x) Archetype:

[INFO] ------------------------------------------------------------------------[INFO] Parameter: groupId, Value: br.com.sosimple

[INFO] Parameter: packageName, Value: br.com.sosimple.javaMagazine


[INFO] Parameter: package, Value: br.com.sosimple.javaMagazine
[INFO] Parameter: artifactId, Value: javaMagazine
[INFO] Parameter: basedir, Value: D:\projetos

[INFO] Parameter: version, Value: 1.0-SNAPSHOT

[INFO] project created from Old (1.x) Archetype in dir: D:\projetos\javaMagazine


[INFO] -----------------------------------------------------------------------[INFO] BUILD SUCCESS

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

12 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

[INFO] ------------------------------------------------------------------------

A partir do diretrio onde o comando do Maven foi executado, um novo


diretrio ser criado, com o nome que foi informado para o artifactId.

Dentro dele, o Maven criou a estrutura padro de diretrios que sugere


como mais apropriado para melhor organizao de projetos, conforme
podemos ver na Figura 4.

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

13 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

Figura 4. Estrutura padro de diretrios, criada automaticamente pelo


Maven.

Depois de criar o diretrio javaMagazine, o Maven criou a pasta src,

onde todo cdigo-fonte deve ser mantido. Dentro de src, main e test

tambm so criadas. A pasta main conter o cdigo-fonte propriamente

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

14 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

dito do projeto, e test ter o cdigo-fonte dos testes unitrios.


Finalmente, dentro destes, ser criada a estrutura de pastas

determinada pelo package, informado na criao do arqutipo,


precedidas por um diretrio pai chamado java.

Alm desses diretrios, h outro criado pelo Maven sempre que

necessrio compilar, construir ou gerar informaes sobre o projeto: o


diretrio target. Para fins de exemplo, vamos pedir ao Maven para

compilar nosso projeto neste momento, o que acarretar a sua criao.


Portanto, no diretrio D:\projetos\javaMagazine, execute o comando

mvn compile para ver a criao da pasta target, exibida na Figura 5.

Figura 5. Diretrio target, conforme criado pelo Maven.


Aps a execuo do comando, todo cdigo do projeto foi compilado e o
seu resultado colocado dentro do diretrio target, conforme podemos
notar por meio da criao do arquivo App.class, correspondente
compilao da classe br.com.sosimple.javaMagazine.App, no local
exibido na Figura 6.

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

15 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

Figura 6. Diretrio target expandido.


muito importante no criarmos nem editarmos nenhum arquivo q

ue esteja dentro de target, pois este diretrio tem seu contedo rot

ineiramente alterado pelo Maven. Isso acontece porque, para refleti


r o cdigo presente no diretrio src, os seus comandos de compila

o e construo vo sempre sobrescrever o contedo de target com


base no contedo de src.

Antes de prosseguirmos, precisamos mencionar como o Maven lida com


as dependncias. Praticamente todo projeto utiliza bibliotecas nativas
ou disponibilizadas por terceiros para reuso de cdigo ou para obter
funcionalidades extras. Gerenciar essas bibliotecas, chamadas de

dependncias no jargo do Maven, pode se tornar uma dor de cabea


em projetos com vrias delas.

O Maven fornece uma maneira fcil de administrar as bibliotecas a

partir do arquivo pom.xml que, entre outras coisas, contm a lista de


dependncias que um projeto utiliza. Com esta lista, a ferramenta as

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

16 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

analisa e tenta localiz-las para disponibilizar para o projeto. Os lugares


onde o Maven procura por dependncias chamam-se repositrios, cujos
tipos principais so local e pblico.

O repositrio local fica no computador onde se est rodando o Maven.


Ele est localizado na pasta .m2/repository dentro da pasta home do
usurio (no computador onde este artigo foi escrito, C:\Users\ottero
\.m2\repository). Este o primeiro lugar onde a ferramenta procura

toda vez que precisa localizar uma dependncia. Caso no a encontre,


ir verificar o repositrio pblico oficial, localizado em

http://repo.maven.apache.org/maven2/. Se encontrar a dependncia

que precisa, o Maven primeiro a copia para o repositrio local e depois a


disponibiliza para o projeto, de modo que no ser mais necessria uma
consulta ao repositrio pblico quando precisar desta mesma

dependncia no futuro. Alm destes repositrios, podemos informar que


utilizaremos dependncias de outros repositrios, bastando, para isso,
registr-los no pom.xml. Em certos ambientes corporativos, onde

diretivas de segurana vetem o acesso livre internet, comum a


existncia de repositrios na rede local que contm as bibliotecas
homologadas pela corporao para uso em seus projetos.

Depois de localizadas as bibliotecas necessrias no repositrio local, o


Maven as utiliza durante a execuo de seus comandos. Assim, se o

comando for mvn compile, o Maven ir utilizar as dependncias para


compilar o projeto; se for mvn package em um projeto web, as

dependncias sero inseridas dentro do arquivo WAR gerado pelo

empacotamento do projeto, e o WAR resultante ser criado dentro do


diretrio target, que, conforme vimos anteriormente, criado e
gerenciado pela ferramenta; se for mvn dependency:copy-

dependencies, o Maven disponibilizar as bibliotecas para o projeto,


colocando-as dentro do diretrio target.

Outra capacidade da ferramenta identificar as dependncias das


dependncias do projeto. Ou seja, se uma biblioteca depender de

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

17 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

outras, o Maven ir procurar por elas tambm e assim sucessivamente,

at todas as dependncias necessrias estarem disposio do projeto.

Este arquivo, presente no diretrio-raiz do projeto, contm todas as

configuraes que o Maven necessita para interagir corretamente com o


projeto. Ele pode ser simples, somente possuindo as coordenadas do
projeto, ou extremamente complexo, relacionando dependncias,

repositrios, repositrios de plugins, plugins especficos, estratgias de


construo do projeto, perfis, entre outros. Na medida em que formos
prosseguindo em nosso artigo, veremos alguns desses itens.

Neste momento, o arquivo pom.xml de nosso exemplo est conforme


foi criado pelo Maven (Listagem 4).

Listagem 4. pom.xml, conforme criado pelo Maven.


<project xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/
<modelVersion>4.0.0</modelVersion>
<groupId>br.com.sosimple</groupId>

<artifactId>javaMagazine</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>javaMagazine</name>

<url>http://maven.apache.org</url>
<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

</properties>

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>
<version>3.8.1</version>

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

18 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

<scope>test</scope>
</dependency>

</dependencies>

</project>

H trs informaes muito importantes neste arquivo: as coordenadas


do projeto, ou seja, os dados que o identificam (groupId, artifactId e

version); o formato de publicao gerado ao se construir o projeto (jar,


war, ear, etc.); e a declarao de que este depende da biblioteca JUnit
verso 3.8.1, com a definio de que o escopo da mesma test, ou

seja, que estar disponvel para o projeto durante a compilao e na


fase de testes, mas no estar presente no pacote do projeto.

Para explorarmos alguns detalhes do pom.xml, vamos criar um servio

no projeto para recuperar os nmeros sorteados na mega-sena. Iremos


usar uma biblioteca da Fundao Apache chamada HttpClient

(http://hc.apache.org/httpcomponents-client-ga/index.html) para se

conectar ao site da Caixa Econmica Federal como se fosse um cliente


HTTP (simulando um navegador web) e recuperar essas informaes.
Para isso, acrescentaremos a biblioteca que usaremos na seo
dependency do pom.xml, conforme a Listagem 5.

Listagem 5. Incluindo uma dependncia no pom.xml


(...)

<dependencies>
<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

19 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

<dependency>

<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.1.3</version>

</dependency>
</dependencies>

(...)

A seguir, no diretrio D:\projetos\javaMagazine, execute o comando

mvn eclipse:eclipse para gerar um projeto para a IDE Eclipse (para criar
os exemplos, baixamos a verso Eclipse IDE for Java EE Developers em
http://www.eclipse.org/downloads/).

Aps iniciarmos a IDE, devemos clicar em File > Import, escolhendo a


opo Existing Projects into Workspace seguido de Next, como
mostrado na Figura 7.

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

20 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

Figura 7. Iniciando wizard de importao de projetos no Eclipse.


Feito este procedimento, o Eclipse solicitar a localizao do projeto a
ser importado. A Figura 8 ilustra como devemos preencher a janela.
Note que no marcamos Copy projects into workspace porque

continuaremos aplicando comandos do Maven em cima do diretrio


onde o projeto foi criado.

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

21 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

Figura 8. Importando o projeto javaMagazine no Eclipse.


Depois da importao do projeto, o Eclipse detectar alguns erros de
compilao, como demonstra a Figura 9.

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

22 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

Figura 9. Erros de compilao no Eclipse.


Estes erros ocorrem porque o Maven criou o projeto para o Eclipse

usando uma varivel chamada M2_REPO, que aponta para o repositrio


local do usurio, que mencionamos anteriormente. a forma com a
qual a ferramenta informa onde esto as bibliotecas utilizadas pelo

projeto. Caso a varivel no exista na IDE, dever ser criada, o que

faremos agora. Para isso, clique com o boto direito no nome do projeto
e acesse Build Path > Configure Build Path. A Figura 10 ilustra o
procedimento.

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

23 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

Figura 10. Configurando o build path do projeto no Eclipse.


Vamos criar a varivel M2P_REPO. Na aba Libraries, podemos ver as

diversas formas que a IDE disponibiliza para incluirmos bibliotecas no

projeto. Podemos incluir as que existem dentro do diretrio do projeto,

ou que estejam em locais externos, entre outras opes. No nosso caso,


que precisamos criar uma varivel, clicaremos no boto Add Variable.
Na janela seguinte, que exibe as variveis presentes na IDE,

escolheremos Configure Variables... e, finalmente, na prxima janela, a

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

24 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

criaremos, clicando em New. As Figuras 11 a 14 ilustram os passos a


serem efetuados.

Figura 11. Configurao da localizao das bibliotecas utilizadas pelo


Eclipse.

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

25 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

Figura 12. Lista de variveis que o Eclipse utiliza para resolver a


localizao de diretrios.

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

26 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

Figura 13. Administrao das variveis do Eclipse.

Figura 14. Incluso da varivel M2_REPO.

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

27 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

Podemos notar que, apesar de termos adicionado apenas uma nova

dependncia ao pom.xml, httpclient, o Maven acrescentou ao projeto,


em seu build path, as dependncias desta nova biblioteca: commons-

codec, commons-logging e httpcore. Consulte novamente a Figura 11


e observe que elas foram adicionadas ao projeto.

Agora o projeto do Eclipse no possui mais erros de compilao, de

modo que podemos prosseguir na nossa codificao para recuperarmos


o resultado do ltimo sorteio da mega-sena.

Como o propsito do artigo demonstrar as funcionalidades do Mav


en, o cdigo do projeto no leva em considerao as boas prticas,
para focar apenas na ferramenta.

O site da Caixa Econmica Federal, http://www.caixa.gov.br/, utiliz

a uma URL para exibir os nmeros sorteados: http://www1.caixa.g


ov.br/_newincludes/home_2011/resultado_megasena.asp.

Iniciando nosso desenvolvimento, vamos criar, dentro do diretrio

src/main/java, uma classe chamada ResultadoMegasena, no pacote


br.com.sosimple.javaMagazine.servicos, com o cdigo exibido na
Listagem 6.

Listagem 6. Cdigo da classe ResultadoMegasena.


package br.com.sosimple.javaMagazine.servicos;
import org.apache.http.client.HttpClient;

import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
/**

* Classe que obtm os nmeros do ltimo sorteio da mega-sena.

*/

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

28 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

public class ResultadoMegasena {


/** URL que possui as dezenas sorteadas. */

private final static String URL = "http://www1.caixa.gov.br/_newincludes/hom


/** Marcao inicial para extrair as dezenas do retorno HTML. */

private final static String MARCA_INICIAL_RETORNO_NAO_UTIL = "<div id='concu


/** Marcao final para extrair as dezenas do retorno HTML. */

private final static String MARCA_FINAL_RETORNO_NAO_UTIL = "</div>";


/**

* Mtodo que se conecta ao site da CEF para obter as dezenas do ltimo sort
* @return array de Strings, onde cada elemento uma dezena sorteada.
*/

public static String[] obtemUltimoResultado() {

//Criao do cliente HTTP que far a conexo com o site


HttpClient httpclient = new DefaultHttpClient();
try {

// Definio da URL a ser utilizada

HttpGet httpget = new HttpGet(URL);

// Manipulador da resposta da conexo com a URL

ResponseHandler<String> responseHandler = new BasicResponseHandle


// Resposta propriamente dita

String html = httpclient.execute(httpget, responseHandler);


//Retorno das dezenas, aps tratamento
return obterDezenas(html);

} catch (Exception e) {

// Caso haja erro, dispara exceo.

throw new RuntimeException("Um erro inesperado ocorreu.",

} finally {

//Destruio do cliente para liberao dos recursos do sistema.

httpclient.getConnectionManager().shutdown();

/**

* Tratamento da resposta HTML obtida pelo mtodo obtemUltimoResultado().


* @param html resposta HTML obtida

* @return array de Strings, onde cada elemento uma dezena sorteada.


*/

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

29 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

private static String[] obterDezenas(String html) {


// Posio inicial de onde comeam as dezenas

Integer parteInicial = html.indexOf(MARCA_INICIAL_RETORNO_NAO_UTIL) + MA


// Posio final de onde comeam as dezenas

Integer parteFinal = html.indexOf(MARCA_FINAL_RETORNO_NAO_UTIL);

// Substring montada com base nas posies, com remoo de espaos.

String extracao = html.substring(parteInicial, parteFinal).replaceAll("


// Criao de array, com base no mtodo split(), separando por hifen.
String[] numeros = extracao.split("-");
return numeros;

}
}

Basicamente, o cdigo acima instancia um cliente HTTP e recupera o

contedo da URL com o resultado da mega-sena sob a forma de String.


Isto feito no mtodo obtemUltimoResultado(). A seguir, a String
enviada para o mtodo obterDezenas(), que extrai as dezenas que
queremos.

Precisamos agora instanciar ResultadoMegasena para que possamos


recuperar as dezenas, e, para isso, alteraremos a classe criada pelo
Maven, App, para ficar com o contedo da Listagem 7.
Listagem 7. Cdigo da classe App atualizado.
package br.com.sosimple.javaMagazine;
import br.com.sosimple.javaMagazine.servicos.ResultadoMegasena;
/**

* Classe que inicializa o projeto.


*/

public class App


{

public static void main( String[] args )


{

String[] resultado = ResultadoMegasena.obtemUltimoResultado();


for (String dezena: resultado) {

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

30 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

System.out.print(dezena + " ");

Por ltimo, dentro da pasta src/test/java, vamos criar uma simples


classe de teste unitrio para ResultadoMegasena, que se chamar
ResultadoMegasenaTest, no pacote

br.com.sosimple.javaMagazine.servicos, cujo contedo est na


Listagem 8. Basicamente, como queremos testar a classe

ResultadoMegasena, precisamos chamar os seus mtodos que


desejamos testar e verificar se os resultados que esperamos

aconteceram. No nosso caso, como apenas queremos ilustrar a


integrao dos testes unitrios com o Maven e no demonstrar

melhores prticas no desenvolvimento de testes, estes so muito

simples: apenas verificam se o retorno do mtodo foi diferente de nulo


e posteriormente se o array retornado composto de seis elementos.
Listagem 8. Cdigo da classe de teste unitrio para a classe
ResultadoMegasena.

package br.com.sosimple.javaMagazine.servicos;
import junit.framework.TestCase;

import br.com.sosimple.javaMagazine.servicos.ResultadoMegasena;
/**

* Classe de teste unitrio para ResultadoMegasena


*/

public class ResultadoMegasenaTest extends TestCase {


/** Nmero de dezenas esperadas no resultado da mega-sena. */
private final static int NUMERO_DE_DEZENAS = 6;
/**

* Teste do mtodo obtemUltimoResultado()


*/

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

31 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

public void testObtemUltimoResultado()

String[] ultimoResultado = ResultadoMegasena.obtemUltimoResultado();


assertNotNull(ultimoResultado);

assertTrue( ultimoResultado.length == NUMERO_DE_DEZENAS );

}
}

Quando executarmos a maioria dos comandos do Maven, todos os

testes unitrios do projeto sero executados automaticamente, e os


seus resultados sero exibidos na tela e armazenados dentro de

arquivos texto e XML, presentes no diretrio target/surefire-reports.

Outra forma que podemos utilizar para testar nosso projeto, mas desta
vez manualmente, rodando a classe App, e o retorno desta execuo
aparecer no console do Eclipse. Caso ocorra algum problema na

execuo do projeto por alguma dessas formas, devemos rever se


todos os passos anteriores foram corretamente realizados.

Um ponto central do Maven o conceito de ciclo de vida de construo


(build lifecycle), que significa que os procedimentos de construo so
definidos em etapas chamadas de estgios do ciclo de vida. Esses

estgios ocorrem de forma cumulativa. Deste modo, se, digamos, o


estgio 4 de um ciclo de vida for invocado, os estgios anteriores

tambm sero executados ordenadamente, ou seja, os estgios 1, 2 e 3


sero acionados antes do Maven ativar o estgio 4.

Os trs ciclos de vida de construo que so nativos da ferramenta so


o padro (default), o clean e o site. O primeiro gerencia a

implementao do projeto, o segundo a limpeza do projeto e o terceiro


compreende a criao automatizada da documentao do projeto.

Destes trs, o principal ciclo o padro, que examinaremos com mais

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

32 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

detalhes neste momento. Os outros sero exemplificados mais a frente.


O ciclo de vida padro possui mais de 20 estgios, dos quais os mais
importantes so:

validate: valida se todas as informaes obrigatrias do projeto esto


preenchidas e so vlidas;

compile: compila o cdigo-fonte;


test: executa os testes unitrios presentes no projeto, desde que o
framework de testes utilizado seja compatvel com o Maven. Por
padro, usado o jUnit;

package: empacota o cdigo compilado no formato definido pela tag


packaging do pom.xml;

integration-test: caso exista, o pacote gerado no estgio anterior


instalado em um ambiente de teste de integrao;

verify: executa checagens para verificar se o pacote vlido e se


atende aos critrios de qualidade;

install: instala o pacote no repositrio local, de modo que outros


projetos locais possam utiliz-lo como dependncia;

deploy: instala o pacote em repositrios externos, efetivamente


disponibilizando-o em ambientes remotos.

Como dissemos anteriormente, se o estgio test for invocado, primeiro


os estgios validate e compile sero executados. Rotineiramente,

costumamos invocar o estgio install, que engloba todos os outros


anteriores e, ao final de sua execuo, temos o cdigo fonte todo

compilado, pronto para execuo e disponibilizado como dependncia


para outros projetos locais.

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

33 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

O Maven uma ferramenta extremamente poderosa, fantasticamente

verstil e flexvel. Ele agrega valor aos projetos onde empregado, por
causa de sua maturidade, filosofia organizacional, praticidade e, graas
aos vrios plugins existentes, de suas inmeras funcionalidades, que
esto sempre sendo expandidas.

Por adotar o conceito de programao por conveno, a ferramenta

abstrai diversos detalhes que poderiam atrapalhar o seu uso cotidiano,


ao mesmo tempo em que permanece aberta a configuraes
especficas, personalizadas para cada necessidade.

No prximo artigo, veremos como utilizar nossas prprias

dependncias, como construir o esqueleto de um projeto web a partir


do Maven, como utilizar as opes de auditoria e analisar em mais
detalhes o seu funcionamento e suas potencialidades!
Links
Site oficial do Maven

http://maven.apache.org/
Site oficial do Java.

www.oracle.com/us/technologies/java/
Parte II

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

34 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

Veja abaixo a quarta parte do artigo - Agora as partes I e II


foram compiladas em um nico artigo. Bons estudos :)

Do que se trata o artigo:


Este artigo conclui nossa breve introduo ferramenta de automao
e gerenciamento de projetos, o Apache Maven, atravs de exemplos
prticos, demonstrando seus principais comandos e compartilhando
dicas de uso.

Em que situao o tema til:

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

35 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

O Apache Maven uma excelente ferramenta de apoio a qualquer

equipe que trabalhe com projetos Java (outras tecnologias tambm so


suportadas), fornecendo aos desenvolvedores uma forma de

automatizar e padronizar a construo e publicao de suas aplicaes.


Neste artigo, exemplificam-se funes de auditoria, relatrio e controle
de qualidade de cdigo, alm do exemplo prtico de como construir e
gerenciar um projeto web com a ferramenta.
Resumo DevMan:
Continuando a introduo ao Maven, demonstraremos como gerar
documentao de forma automatizada, obter relatrios com

informaes sobre o projeto, verificar a qualidade do cdigo, como

utilizar projetos prvios como bibliotecas para novos e terminamos com


uma seo apresentando algumas dicas de uso.

Neste artigo, daremos continuidade ao nosso estudo sobre o Maven.


Como dissemos na primeira parte, ele, em si, uma ferramenta de
gerenciamento e automao de construo (build) de projetos. No
entanto, com a disponibilidade de inmeros plugins para os mais

variados fins, o Maven transcende sua proposta original, tornando-se


uma potente fonte de funcionalidades auxiliares para o projeto.
Na Easy Java de nmero 20, mostramos ainda a estratgia da

ferramenta para facilitar o controle das bibliotecas utilizadas pelo


projeto, ao assumir a responsabilidade por obt-las e as instalar

automaticamente. Isso, claro, presumindo que o Maven esteja bem

configurado e que as bibliotecas sejam pblicas ou estejam disponveis


no ambiente em que a ferramenta est sendo empregada.

Por fim, vimos tambm como a ferramenta estimula o emprego de boas


prticas na implementao de solues, ao adotar o conceito de

programao por conveno (do ingls convention over configuration),


no qual o Maven assume automaticamente que o seu usurio ir

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

36 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

empregar a mesma metodologia e padro de organizao que ele

considera ideal, poupando-o do trabalho tedioso de sempre ter que


descrever as mesmas informaes em cada projeto, como quais

diretrios contm cdigo a ser compilado, o destino dos artefatos

compilados, etc. Ao empregar inerentemente as prticas sugeridas pela


comunidade, a ferramenta acaba as divulgando e estimulando que os

projetos tambm as utilizem, aumentando a padronizao e diminuindo


a curva de aprendizado para novos desenvolvedores. Obviamente,

qualquer conveno destas pode ser sobrescrita pelo usurio, que ento
dever informar como quer que a ferramenta se comporte para seu
projeto, prtica somente aconselhada para casos de exceo, como
projetos legados.

No artigo anterior, apresentamos alguns princpios bsicos do Maven,

como o uso de arqutipos para a criao de projetos Java, o conceito de

dependncias (bibliotecas utilizadas pelo projeto), o arquivo pom.xml (o


corao da ferramenta, responsvel por sua configurao e controle de
todas as suas funcionalidades) e explicamos seu ciclo de vida de

construo. Ao mesmo tempo em que explanvamos os princpios, os


aplicvamos na prtica, o que culminou na criao de um pequeno

projeto exemplo, cujo propsito era exibir as ltimas dezenas sorteadas


pela Mega-Sena. Este projeto pode ser baixado no site da Edio
anterior.

Prosseguindo com o nosso estudo, vamos rodar o estgio install do ciclo


de vida padro, que um dos comandos mais bsicos do Maven, para
que possamos analisar as etapas de construo do pacote de

publicao. Como vimos no artigo prvio, o estgio install, ao executar,


automaticamente invoca os estgios anteriores a si, instruindo a
ferramenta a validar, compilar, testar e empacotar o projeto.

Para isso, vamos executar, dentro do diretrio do projeto (caso tenha

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

37 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

sido adotada a sugesto do artigo prvio, ser D:\projetos

\javamagazine), o comando: mvn clean install. Utilizamos o clean antes


do install para instruir a ferramenta a descartar todo o cdigo j gerado
por ela para o projeto antes de comear o processamento dos demais
ciclos de vida. Na prtica, o clean apaga o diretrio target.

O resultado da execuo deste comando est na Listagem 1.


Listagem 1. Resultado do comando mvn clean install.
D:\projetos\javaMagazine>mvn clean install
[INFO] Scanning for projects...
[INFO]

[INFO] -----------------------------------------------------------------------[INFO] Building javaMagazine 1.0-SNAPSHOT

[INFO] -----------------------------------------------------------------------[INFO]

[INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ javaMagazine --[INFO] Deleting D:\projetos\javaMagazine\target (1)


(...)

[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ javaMagazine


[INFO] Compiling 2 source files to D:\projetos\javaMagazine\target\classes (2)
(...)

[INFO] --- maven-surefire-plugin:2.10:test (default-test) @ javaMagazine ---

[INFO] Surefire report directory: D:\projetos\javaMagazine\target\surefire-repor


------------------------------------------------------T E S T S

------------------------------------------------------Running br.com.sosimple.javaMagazine.AppTest

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.009 sec (4)
Running br.com.sosimple.javaMagazine.servicos.ResultadoMegasenaTest

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.317 sec (4)
Results :
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
[INFO]

[INFO] --- maven-jar-plugin:2.3.2:jar (default-jar) @ javaMagazine ---

[INFO] Building jar: D:\projetos\javaMagazine\target\javaMagazine-1.0-SNAPSHOT.j

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

38 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

[INFO]

[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ javaMagazine [INFO] Installing D:\projetos\javaMagazine\target\javaMagazine-1.0-SNAPSHOT.jar


0-SNAPSHOT.jar (6)
(...)

[INFO] -----------------------------------------------------------------------[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

Com base no retorno obtido, podemos perceber alguns pontos

importantes para a compreenso do funcionamento do Maven,


marcados em vermelho:

1. O ciclo de vida clean executado e o diretrio target removido. Se


ocorrer algum problema neste ponto, provavelmente porque existe
algum arquivo desta pasta aberto, ou algum processo do sistema

operacional est utilizando arquivos dentro deste diretrio. Esse ltimo

caso costuma ocorrer com pacotes web (WAR) que esto instalados em
servidores web ativos;

2. Gerao do cdigo compilado do projeto, e sua disponibilizao


dentro do diretrio target/classes;

3. Criao do diretrio target\surefire-reports, onde so publicados os


resultados dos testes automatizados do projeto. Cada classe de teste
executada gera dois arquivos dentro deste diretrio, um em formato

texto e outro em formato XML, com o nome da classe. O arquivo texto


contm o resultado da execuo do teste e o XML guarda as
propriedades do ambiente onde os testes foram realizados;

4. Apresenta o resultado dos testes. Caso ocorra alguma falha em

algum dos testes unitrios, devemos olhar o resultado do teste falho no


diretrio citado no item 3;

5. Empacotamento do projeto, no formato definido pela tag packaging


do pom.xml;

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

39 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

6. Disponibilizao do pacote gerado no repositrio local.


Aps o trmino, encontraremos o pacote gerado dentro da raiz do

diretrio target: javaMagazine-1.0-SNAPSHOT.jar. Podemos notar que o


nome padro para o pacote se constitui do artifactId e da verso do
artefato, separados por um hfen.

Vamos agora usar o ciclo de vida site para gerar a documentao do

projeto. Se executarmos mvn clean site neste momento, o comando ir

funcionar, porm o Maven ir nos alertar de que no definimos a verso


que queremos utilizar do plugin que empregado pela ferramenta para
a documentao. Ento, antes de seguirmos em frente, precisamos

acrescentar mais uma seo ao nosso pom.xml, conforme mostrado na


Listagem 2.

Listagem 2. Acrescentando o plugin de relatrio.


(...)

<reporting>
<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.2</version>

</plugin>

</plugins>

</reporting>
</project>

A seo apresentada nesta listagem pode ser inserida em qualquer

ponto do pom.xml. Por comodidade, sugerimos coloc-la logo antes da


tag final do arquivo, ou seja, </project>. Feito isso, ao executarmos o

comando mvn clean site, o diretrio site ser criado dentro de target e
nele haver um arquivo chamado index.html. Ao abrimo-lo em um

navegador, veremos que foi montado um pequeno site informativo do


projeto, com diversas informaes teis, como a rvore de

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

40 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

dependncias do projeto.
Outra funcionalidade til do Maven a gerao simplificada do Javadoc
do projeto. Para tanto, basta incluir o plugin do Javadoc na seo

reporting, conforme exemplo mostrado na Listagem 3. Esta seo do

pom.xml destinada aos plugins que geram relatrios sobre o cdigofonte.

Listagem 3. Acrescentando o plugin Javadoc.


(...)

<reporting>
<plugins>

(...)

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-javadoc-plugin</artifactId>
<version>2.7</version>

</plugin>
(...)

</plugins>

</reporting>

(...)

Para acionar o plugin, basta usar o comando mvn clean javadoc:jar, que
cria a documentao empacotada sob a forma de um JAR, de nome

javaMagazine-1.0-SNAPSHOT-javadoc.jar, e o diretrio target\apidocs.


O arquivo index.html o ponto de entrada para a documentao da

API. Para criarmos somente o diretrio com a documentao, sem a


criao do jar supracitado, podemos utilizar o comando mvn clean
javadoc:javadoc.

Com a documentao gerada, vamos ento testar a qualidade do

cdigo-fonte. Para isso, lanaremos mo de uma ferramenta open

source j consolidada no mercado, o PMD, que verifica cdigo Java em


busca de problemas, como cdigo que nunca ser utilizado,

complexidade desnecessria, ms prticas, entre outros. Para mais

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

41 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

informaes sobre o PMD, consulte o site da ferramenta, em:


http://pmd.sourceforge.net/.

Antes, precisaremos fazer algumas configuraes no arquivo pom.xml.


Por padro, o cdigo gerado pela compilao do Maven compatvel

com o JDK 1.5, enquanto o PMD analisa o cdigo com base no JDK 1.4.

Por causa disso, teremos que garantir que tanto o compilador do Maven
quanto o PMD utilizem a mesma verso de JDK nas suas execues.

Assim, iremos declarar uma propriedade dentro da seo properties do


pom.xml. O resultado final ser:
<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<compileSource>1.6</compileSource>

</properties>

Em seguida, precisamos declarar explicitamente qual a verso do


Maven compiler a ser utilizada, bem como a do PMD. No caso do

compiler, acrescentaremos a seo build, que a seo onde definimos


os plugins utilizados para gerao de cdigo ver Listagem 4.
Listagem 4. Acrescentando o plugin maven-compiler.
<build>

<plugins>

<plugin>

<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>

<source>${compileSource}</source>

<target>${compileSource}</target>

</configuration>
</plugin>

</plugins>

</build>

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

42 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

Para o plugin do PMD, iremos acrescentar sua definio dentro da seo


reporting, para que fique de acordo com a Listagem 5.
Listagem 5. Acrescentando o plugin PMD.
<reporting>
<plugins>
(...)

<plugin>

<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-pmd-plugin</artifactId>
<version>2.7.1</version>
<configuration>

<targetJdk>${compileSource}</targetJdk>
</configuration>
</plugin>

(...)

</plugins>

</reporting>

Podemos notar que a propriedade ${compileSource} usada tanto para


o plugin compiler quanto para o pmd. Com esta preparao, podemos
executar o ciclo de vida site, atravs de mvn clean site, que incluir o

plugin PMD. Logo aps, dentro do diretrio target/site, encontraremos


dois arquivos gerados pelo PMD: pmd.xml e pmd.html. No entanto,

ambos estaro vazios, porque o projeto no possui nenhum problema.


Sugerimos experimentar este plugin em um projeto profissional, para
avaliao de um cdigo-fonte real. Ainda no quesito qualidade,

podemos tambm utilizar outro plugin; desta vez da ferramenta

Checkstyle, que empregada para verificar a aderncia aos padres de


codificao, como indentao, uso de boas prticas, formatao de

cdigo, presena de javadoc nos mtodos, etc. Acrescentemos ento o


plugin do Checkstyle na seo reporting, conforme a Listagem 6.
Listagem 6. Acrescentando o plugin Checkstyle.
<reporting>

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

43 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

<plugins>
(...)

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.6</version>

</plugin>
(...)

</plugins>

</reporting>

Em seguida, basta executarmos novamente o comando mvn clean site e


checar o resultado em target/site, no arquivo checkstyle.html. Agora,
nosso exemplo apresentou vrias infraes (de acordo com as
recomendaes da ferramenta), como linhas com mais de 80

caracteres, parmetros sem o modificador final, entre outras.


Tanto o PMD quanto o Checkstyle fornecem a possibilidade de

configurao personalizada de suas regras e de suas validaes, atravs


de arquivos XML. Para mais informaes, sugerimos consultar os

endereos: http://maven.apache.org/plugins/maven-pmd-plugin/ e
http://maven.apache.org/plugins/maven-checkstyle-plugin/.

Por fim, vale a pena ressaltar que o Maven tambm pode gerar todas

essas informaes de auditoria de forma grfica, atravs do comando


mvn clean site dashboard:dashboard, que ir gerar o arquivo
dashboard-report.html, dentro de target/site.

Todas as funcionalidades do Maven so propiciadas atravs de plugins.


Cada comando que ns damos , na verdade, uma invocao a um
plugin diferente, como clean, install, site, etc. Na pgina

http://maven.apache.org/plugins/, temos a listagem dos plugins oficiais


existentes. Outro site com diversos plugins teis

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

44 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

http://mojo.codehaus.org/plugins.html, como um que integra o Maven


com a ferramenta Hibernate, outro que executa instrues SQL e um

que permite ao Maven se comunicar com o servidor de aplicao JBoss.


Por causa de sua arquitetura orientada a plugins, possvel perceber
que o Maven permite a adio transparente de funcionalidades

conforme a evoluo do projeto, alm de permitir que qualquer um crie


um plugin para atender os requisitos que no estejam cobertos pelos

plugins existentes. Por exemplo, pode-se querer que o Maven publique


a documentao gerada automaticamente em um servidor web da

empresa, de acordo com certos padres; pode-se desejar que o Maven


automatize procedimentos de projetos legados, substituindo trabalho
manual. Como pode ser observado, as possibilidades so infinitas.

Para demonstrar a criao de um projeto web atravs do Maven,

desenvolveremos um aplicativo que ir exibir, em ambiente web, as


dezenas sorteadas da Mega-Sena e, para obter essa informao,
utilizaremos nosso projeto javaMagazine.

Assim, utilizaremos um arqutipo para criar nosso projeto web e

posteriormente incluiremos o projeto javaMagazine como dependncia


dele. Desta vez, entretanto, mostraremos outra forma de utilizar a

criao de projetos por arqutipo, passando as coordenadas do projeto


como parmetros. Portanto, dentro do diretrio onde se deseja criar o
projeto, execute: mvn archetype:generate

-DarchetypeArtifactId=maven-archetype-webapp

-DartifactId=javaMagazineWeb -DgroupId=br.com.sosimple
-Dversion=1.0-SNAPSHOT

-Dpackage=br.com.sosimple.javaMagazineWeb (no nosso caso, foi


D:\projetos\javaMagazineWeb).

Este comando j instruiu ao Maven qual projeto queremos que seja

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

45 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

criado, e especificamos suas coordenadas, isto , seus dados de

identificao nica: groupId, artifactId e version. Antes de efetivamente


criar o projeto, a ferramenta solicitar confirmao dos dados
informados. Confirme pressionando <Enter>.

A seguir, no diretrio onde o projeto foi criado, execute o comando mvn


eclipse:eclipse para criar um projeto para o Eclipse, e em seguida o
importaremos para analisarmos os arquivos criados pelo Maven.

Uma vez importado o projeto no Eclipse, podemos incluir nosso projeto


prvio como dependncia do novo. Dessa forma, primeiro vamos

garantir que ambos os projetos sejam gerados com a mesma verso do


JDK, atravs da configurao do plugin Maven compiler, conforme

fizemos previamente. Depois, incluiremos a dependncia para o projeto


javaMagazine na seo dependencies, e tambm as dependncias

necessrias para o suporte a servlets, que so as classes Java que

fornecem capacidades web a um projeto. O pom.xml do projeto ficar


como mostrado na Listagem 7.

Listagem 7. pom.xml do projeto web.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/
<modelVersion>4.0.0</modelVersion>
<groupId>br.com.sosimple</groupId>

<artifactId>javaMagazineWeb</artifactId>
<packaging>war</packaging>

<version>1.0-SNAPSHOT</version>

<name>javaMagazineWeb Maven Webapp</name>


<url>http://maven.apache.org</url>
<properties>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<compileSource>1.6</compileSource>

</properties>
<build>

<plugins>

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

46 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

<plugin>

<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>

<source>${compileSource}</source>

<target>${compileSource}</target>

</configuration>
</plugin>
<plugin>

<groupId>org.mortbay.jetty</groupId>

<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
</plugin>

</plugins>

</build>

<dependencies>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>

<groupId>br.com.sosimple</groupId>

<artifactId>javaMagazine</artifactId>
<version>1.0-SNAPSHOT</version>

</dependency>
<dependency>

<groupId>javax.servlet</groupId>

<artifactId>servlet-api</artifactId>
<version>2.4</version>

<scope>provided</scope>

</dependency>
<dependency>

<groupId>javax.servlet.jsp</groupId>

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

47 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

<artifactId>jsp-api</artifactId>
<version>2.0</version>

<scope>provided</scope>

</dependency>
</dependencies>
</project>

Como inclumos novas dependncias, precisamos executar mvn

eclipse:eclipse novamente, para que o projeto do Eclipse reflita as

incluses. Depois de executado o comando, ser necessrio atualizar o


projeto no Eclipse (clicando com o boto direito no nome do projeto e
depois na opo Refresh). Veremos que o Maven automaticamente
tambm incluiu as dependncias utilizadas pelo projeto anterior.

importante notar nas dependncias de servlet que elas possuem


escopo provided, o que significa que o projeto precisa delas para

compilar, mas que elas sero fornecidas pelo ambiente de execuo, de


modo que essas dependncias no precisaro ser includas no

empacotamento do WAR. O ambiente de execuo, nesse caso, ser um


servidor web com suporte a Servlet, o Jetty

(https://www.webtide.com/). Como rodaremos o aplicativo web a partir


da linha de comando do Maven, ento tambm devemos declarar,
dentro da seo build, o plugin do Jetty.

Com o intuito de especificar a localizao do cdigo-fonte para a IDE,


criaremos um Source Folder, onde ficar nosso cdigo Java. Deste
modo, pressionando com o boto direito sobre o nome do projeto

javaMagazineWeb, selecionaremos New > Source Folder. Em seguida,


informaremos src/main/java como Folder name, de acordo com as
Figuras 1 e 2.

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

48 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

Figura 1. Selecionando criao de source folder.

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

49 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

Figura 2. Definindo o source folder.


No source folder que acabamos de configurar, iremos comear o

desenvolvimento propriamente dito do nosso projeto web. Como se

trata apenas de um exemplo, utilizaremos apenas uma servlet, que,


quando chamada a partir de um navegador, ir invocar a classe

ResultadoMegasena, do nosso projeto anterior, e obter as dezenas


para depois exibi-las na web. Para esse fim, criaremos o pacote

br.com.sosimple.javaMagazineWeb.servlets e, dentro dele, a classe

ResultadoMegasenaServlet, cujo contedo est expresso na Listagem


8.

Listagem 8. Cdigo-fonte da classe ResultadoMegasenaServlet.


package br.com.sosimple.javaMagazineWeb.servlets;
import java.io.IOException;
import java.io.PrintWriter;

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

50 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;
import br.com.sosimple.javaMagazine.servicos.ResultadoMegasena;
public class ResultadoMegasenaServlet extends HttpServlet {
private static final long serialVersionUID = -2387491444867572667L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
PrintWriter out = response.getWriter();

String[] resultado = ResultadoMegasena.obtemUltimoResultado();


for (String dezena: resultado) {
}

out.print(dezena + " ");

out.flush();
}

out.close();

Depois da classe pronta, precisaremos definir seus dados no arquivo


/javaMagazineWeb/src/main/webapp/WEB-INF/web.xml, onde lhe

forneceremos um nome (megasena) e depois iremos definir qual ser a

URL que a invocar, para que o servidor web saiba para onde direcionar
requisies que apontem para a servlet. O contedo do arquivo

web.xml, que fornece as configuraes do nosso projeto web, dever


ser o mesmo da Listagem 9.

Listagem 9. Contedo do arquivo web.xml.


<!DOCTYPE web-app PUBLIC

"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"


"http://java.sun.com/dtd/web-app_2_3.dtd" >

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

51 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

<web-app>

<display-name>Archetype Created Web Application</display-name>


<servlet>

<servlet-name>megasena</servlet-name>

<servlet-class>br.com.sosimple.javaMagazineWeb.servlets.ResultadosMegasen
</servlet>

<servlet-mapping>

<servlet-name>megasena</servlet-name>
<url-pattern>/megasena</url-pattern>
</servlet-mapping>

</web-app>

O prximo passo compilar o cdigo, empacot-lo e o rodar no servidor


web Jetty. Isso tudo ser realizado com o comando mvn clean install
jetty:run. Note que a linha de comando fica presa, indicando que o
servidor est no ar. Enquanto no pressionarmos Ctrl + C, o Jetty
continuar servindo requisies.

A URL para testarmos nossa servlet http://localhost:8080

/javaMagazineWeb/megasena. Se tudo ocorreu como esperado,

visualizaremos na tela os nmeros do ltimo sorteio da Mega-Sena.

A seguir, apresentamos uma compilao de dicas para o uso cotidiano


do Maven:

Maven em modo offline: uma vez que tenhamos todas as

dependncias do projeto em nosso repositrio local, podemos

economizar tempo explicitando que os comandos do Maven somente

consultaro o repositrio local. Para isso, acrescente o parmetro o,


como no exemplo mvn install o;

Pular o estgio de testes no ciclo de vida padro: como vimos na


explicao dos ciclos de vida do Maven, grande parte dos estgios do

ciclo de vida padro ocorrem aps o estgio de testes, implicando que

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

52 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

os testes unitrios do projeto so executados com uma frequncia que

pode ser desnecessria, sobretudo em projetos com grande quantidade


de testes unitrios. O parmetro -Dmaven.test.skip=true indica que o

estgio de testes no deve ser executado, como no exemplo mvn install


-Dmaven.test.skip=true. Obviamente, essa dica deve ser empregada
com moderao, para no eliminar as vantagens da existncia dos
testes unitrios;

Clean: sempre que possvel, devemos incluir o ciclo clean nos

comandos que executamos, para termos certeza de que no teremos


cdigo esprio no diretrio target. Um exemplo disso ocorre quando

removemos arquivos do diretrio src: caso eles j existam no target,


no sero apagados;

mvnrepository.com: este site muito til para quem usa o Maven,


porque informa as coordenadas de todas as verses das bibliotecas

comumente utilizadas em projetos Java, alm de fornecer o trecho de


cdigo necessrio para registrar a dependncia dentro da seo

dependencies do pom.xml. A biblioteca que usamos no nosso exemplo,


httpclient, est cadastrada no site: http://mvnrepository.com/artifact
/org.apache.httpcomponents/httpclient. Podemos ver que existe uma

entrada para a verso que utilizamos, 4.1.3, que a mais recente com
status de release da listagem. Clicando em cima do nmero da verso,
temos acesso a vrias informaes da dependncia, como link para

download, homepage, snippet para incluir no pom.xml, dependncias


utilizadas, etc.;

Adicionando suporte ao Maven em sua IDE preferida: existem


plugins para as IDEs mais famosas do mercado, o que permite que
estas tenham as funcionalidades da ferramenta integradas a elas.
Consulte a seo de Links para mais informaes;

Incluindo uma dependncia manualmente no repositrio local:


em algumas vezes, no possvel encontrar as coordenadas de uma

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

53 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

dependncia pblica. Em outras, temos dependncias que foram criadas


para um projeto especfico e no so pblicas, como ocorreu no nosso

exemplo. Como a dependncia no est publicada no repositrio pblico


do Maven, obviamente estar indisponvel para projetos que queiram

utiliz-la. Uma soluo para esse problema instalarmos o pacote da


biblioteca em nosso repositrio local, atravs do comando mvn

install:install-file -Dfile=<caminho para o arquivo> -DgroupId=<id do


grupo> -DartifactId=<id do artefato> -Dversion=<versao>
-Dpackaging=<formato de empacotamento (jar, war, etc)>

-DgeneratePom=true. Com isso, estamos instruindo o Maven a incluir a


dependncia, informando todas as coordenadas dela como parmetros

do comando. Como exemplo, caso precisssemos instalar o projeto que


criamos, javaMagazine, no repositrio, teramos que executar o

comando: mvn install:install-file -Dfile=D:\projetos\javaMagazine

\target\javaMagazine-1.0-SNAPSHOT.jar -DgroupId=br.com.sosimple

-DartifactId=javaMagazine -Dversion=1.0-SNAPSHOT -Dpackaging=jar


-DgeneratePom=true.

Prosseguindo com as informaes do artigo anterior, demonstramos


outras possibilidades de utilizao do Maven. Conforme vimos, a

ferramenta fornece ainda mais velocidade na codificao, automatiza

uma srie de etapas (compilao, testes, empacotamento, distribuio,

aferio de qualidade, gerao de documentao, entre outras), ajuda a


manter o projeto mais organizado, gerencia as dependncias de forma
centralizada e transparente e facilita a manuteno dos aplicativos.

Este artigo tem o propsito apenas de fornecer uma pequena viso da


potencialidade do Maven. Recomendamos que este texto seja usado
apenas para guiar os pequenos passos, e que os usurios desta

ferramenta a estudem a fundo, para aproveit-la cada vez mais.


Com as vantagens que oferece, fica fcil entender porque o Maven

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

54 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

hoje amplamente utilizado para gerenciar projetos. Do ponto de vista

das equipes de implementao, o trabalho fica muito mais organizado e


o desenvolvimento mais rpido e eficiente. Da perspectiva gerencial do
projeto, alm do ganho de produtividade e em manutenibilidade,

torna-se possvel executar auditorias no cdigo produzido e gerar


documentao automaticamente. Por todos esses fatores,

recomendamos enfaticamente sua adoo em projetos Java EE!

O autor gostaria de agradecer a seu amigo e colega, Jorge Herrera


Robert, pelo seu criterioso peer review e por suas inestimveis
sugestes.
Links
Site oficial do Maven.

http://maven.apache.org/
Site oficial do Java.

www.oracle.com/us/technologies/java/
Site com plugin do Maven para o Eclipse.
http://maven.apache.org/eclipse-plugin.html

Site com plugin do Maven para o NetBeans.


http://wiki.netbeans.org/Maven

Site com plugin do Maven para o IntelliJ IDEA.

http://www.jetbrains.com/idea/features/ant_maven.htm

por Rodrigo Ottero.

Expert em Java e programao Web

31/07/2016 09:38

Introduo ao Maven - Revista easy Java Magazine 20 - Parte 1

55 de 55

http://www.devmedia.com.br/articles/viewcomp_forprint.asp?comp=25128

31/07/2016 09:38

You might also like