Você está na página 1de 81

www.eteg.com.br R. Sergipe, 472 Pilotis Funcionrios CEP: 30.

130-170 Belo Horizonte MG Telefone: (31) 3889-0990

Introduo ao Apache Maven

Curso Introduo ao Apache Maven

Introduo ao Apache Maven

Copyright 2008 by Eteg Tecnologia da Informao Ltda Autor: Walter dos Santos Filho Editor: Walter dos Santos Filho

Este trabalho est licenciado sob uma Licena Creative Commons Atribuio-Uso No-ComercialVedada a Criao de Obras Derivadas 2.5 Brasil. Para ver uma cpia desta licena, visite http://creativecommons.org/licenses/by-nc-nd/2.5/br/ ou envie uma carta para Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA. Mesmo tendo sido tomadas todas as precaues na confeco deste material, a Eteg Internet no se responsabiliza por perdas ou danos decorrentes das informaes contidas neste documento, seja por omisso ou erros. Sugestes e comentrios podem ser enviados para: treinamento@eteg.com.br Eteg, eBabel, Capri, Integrato, Sinon, Safira e Calipso e o logo Eteg so marcas da Eteg Tecnologia da Informao Ltda. Sun, Java, JDK so marcas registradas da Sun Microsystems, Inc. Microsoft, Microsoft Windows, .Net, C# e Visual Basic so marcas registradas da Microsoft Corporation. Websphere, Rational Unified Process e Rational Rose so marcas registradas da IBM. Oracle 9i, Oracle9iAs so marcas da Oracle Corporation. JBoss marca registrada da JBoss Inc. Todos os demais produtos descritos neste material so marcas registradas de seus respectivos proprietrios. Caso voc no tenha obtido este documento diretamente da Eteg, verifique em nosso site se voc est com a verso mais recente.

www.eteg.com.br

ii

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Eteg Tecnologia da Informao Ltda

iii

Introduo ao Apache Maven

ndice Geral
Introduo ao Apache Maven..................................................................................................................1 Captulo 1 Introduo............................................................................................................................5 Processo de Construo de um Software............................................................................................6 Viso Conceitual.................................................................................................................................7 Viso Fsica.........................................................................................................................................9 Objetivos e Funcionalidades do Maven............................................................................................11 Ant versus Maven..............................................................................................................................13 Modelo de Objetos de Projetos (POM).............................................................................................14 Repositrio Maven............................................................................................................................17 Repositrios e Coordenadas..............................................................................................................19 Introduo aos Plug-ins.....................................................................................................................22 Reviso e Laboratrio.......................................................................................................................24 Captulo 2: Instalao, Utilizao e Principais Recursos.......................................................................25 Instalando o Maven 2........................................................................................................................26 Criando o Primeiro Projeto com Archetype......................................................................................27 O Plug-in Archetype..........................................................................................................................30 Alterando o POM..............................................................................................................................31 Compilando e Testando o Projeto.....................................................................................................33 Empacotando e Disponibilizando Localmente..................................................................................37 Gerando Documentao Javadoc......................................................................................................39 Configurando o Maven para uso com o Eclipse...............................................................................41 Definindo Dependncias para o Projeto............................................................................................43 Reviso e Laboratrio.......................................................................................................................46 Captulo 3: Trabalhando com vrios Projetos........................................................................................47 Motivao..........................................................................................................................................48 Definindo o Projeto Principal (Master).............................................................................................49 Criando uma Nova Biblioteca...........................................................................................................52 Criando o Projeto para o Site............................................................................................................53 Herana entre POMs.........................................................................................................................56 Empacotando o Projeto.....................................................................................................................58 Reviso e Laboratrio.......................................................................................................................59 Captulo 4: Configuraes de Plug-ins e Relatrios..............................................................................60 Introduo..........................................................................................................................................61 Configurando a Fase de Compilao................................................................................................63 Configurando o Empacotamento da Aplicao.................................................................................65 Propriedades......................................................................................................................................67 Plug-in Report e Website do Projeto ...............................................................................................69 Utilizando o Plug-in Report .............................................................................................................72 Utilizando outros Plug-ins para Relatrios.......................................................................................75 Relatrios JavaDoc e JXR.................................................................................................................77 Disponibilizando o Website .............................................................................................................79 Reviso e Laboratrio.......................................................................................................................80 Bibliografia.............................................................................................................................................81

iv

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Captulo 1 Introduo

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Processo de Construo de um Software


Processo de Construo de Software

Cada dia, novos requisitos tornam a construo do software mais complexa Manter um processo que possibilite gerar verses de forma consistente e rapidamente um desafio O Maven um software para construo de software integrado com a internet

Cdigo livre Permite gerenciar projetos complexos


(multiprojetos)

A construo de um software atualmente no mais simplesmente construir um projeto simples, monoltico e individual. Cada dia novos requisitos so necessrios para se crier as chamadas solues corporativas: segurana, robustez, acessibilidade, integrao, etc. Manter o controle do projeto, de forma que seja possvel criar uma verso do software que seja consistente e padronizada um desafio e por isto, vrias ferramentas foram criadas: make, Ant, build, entre outras. O Apache Maven, com seu sistema de construo de software, a evoluo deste tipo de ferramenta atravs da integrao com a internet.

Sobre o Maven
O Maven um projeto de cdigo livre, mantido pela Apache Software Foundation, criado originalmente para gerenciar o complexo processo de criao do projeto Jakarta Turbine. Desde seu incio, o Maven tem sido utilizado por projetos de cdigo livre e tambm proprietrio. Com a verso 2, o Maven passou de uma ferramenta de construo para uma ferramenta complexa de gesto de construo de software, com vrias funcionalidades e aplicvel a maioria dos cenrios de desenvolvimento de software. Importante: Neste curso, sempre que nos referirmos ao Maven, estaremos tratando da verso 2, tambm chamada de Maven 2.

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Viso Conceitual
Viso Conceitual

Nesta viso, os principais componentes do Maven so:

Project Object Model (POM): Configura o funcionamento do Maven. Dependency Management Model: Gerencia dependncias entre artefatos Ciclo de vida e fases: Controlam o processo de construo Plug-ins: So extenses do Maven

Para compreender o processo de construo de software com o Maven, importante entender um conjunto de modelos conceituais que explicam como as coisas funcionam.

Figura 1: Modelo de objetos e de operao do Maven

Os componentes principais da figura anterior so: Project object model (POM): O POM o componente principal para o Maven. Parte deste modelo faz parte do mecanismo interno do Maven. Outra parte informada por um arquivo pom.xml editado por voc. Dependency management model: A gesto de dependncia uma parte do processo de construo de software que muitas ignorada em projetos, mas que fundamental. O Maven reconhecidamente uma das melhores

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven


ferramentas para a construo de projetos complexos, especialmente pela sua robustez na gesto de dependncias. Ciclo de vida de construo e fases: Associado ao POM, existe a noo de ciclo de vida de construo e fases. atravs deste modelo que o Maven cria uma ponte entre os modelos conceituais e os modelos fsicos. Quando se usam plug-ins, por meio deste componente que tais plug-ins so gerenciados e passam a seguir um ciclo de vida bem definido. Plug-ins: estendem as funcionalidades do Maven.

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Viso Fsica
Viso Fsica

POM, como j foi dito, pode ser alterado atravs do arquivo pom.xml Artefatos: cada unidade do Maven que forma um componente Repositrios: onde o Maven procura por artefatos

Pode ser local ou remoto Permite identificar dependncias entre artefatos, inclusive dependncias transitivas

Mecanismo de resoluo de dependncias Plug-ins: Esto associados s fases do ciclo de vida

A figura a seguir mostra os componentes fsicos do Maven com os quais voc pode interagir:

Figura 2: Arquivos, diretrios e repositrios utilizados pelo Maven

Na figura anterior, o POM (Project Object Model), como j foi dito, formado por dados internos ao Maven e por um ou mais arquivos pom.xml. Os arquivos pom.xml formam uma espcie de hierarquia, com cada um herdando os atributos do seu pai. O prprio Maven prov um POM que est no topo da hierarquia e portanto define os valores default para todos os projetos.

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven


As dependncias so especificadas como parte do arquivo pom.xml. O Maven identifica as dependncias do projeto de acordo com seu modelo de gerenciamento de dependncias. O Maven procura por componentes dependentes (chamados artefatos na terminologia do Maven) no repositrio local e em repositrios globais. Artefatos encontrados em repositrios remotos so baixados para o repositrio local para um acesso posterior mais eficiente. O mecanismo de resoluo de dependncias do Maven pode identificar dependncias transitivas (A depende de B que depende de C, logo, A depende de C). Plug-ins so configurados e descritos no arquivo pom.xml. O plug-in propriamente dito gerenciado como um artefato pelo sistema de gerenciamento de dependncias e baixados quando eles so necessrios para realizar alguma atividade de construo. Cada plug-in pode ser associado a vrias fases do ciclo de vida. O Maven mantm uma mquina de estados que transita pelo ciclo de vida e dispara os plug-ins quando necessrio.

10

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Objetivos e Funcionalidades do Maven


Objetivos e Funcionalidades do Maven

Algumas dvidas comuns no desenvolvimento de software:

Qual deve ser a estrutura de diretrios para organizar o Como devem ser estruturados os diretrios de forma a
projeto?

organizar o cdigo-fonte, cdigo de teste, bibliotecas, configurao, documentao e relatrios do projeto? De onde as bibliotecas Java (JARS) devero ser baixados?

O Maven...

Define como o projeto tipicamente organizado e construdo. Utiliza conveno sobre configurao flexvel e extensvel

No desenvolvimento de projetos de software, o desenvolvedor encontrar algumas perguntas como: Qual deve ser a estrutura de diretrios para organizar o projeto? Como devem ser estruturados os diretrios de forma a organizar o cdigofonte, cdigo de teste, bibliotecas, configurao, documentao e relatrios do projeto? De onde as bibliotecas Java (JARS) devero ser baixados? Quais verses das bibliotecas (JARS) devero ser utilizadas? Qual a melhor forma de resolver conflitos entre bibliotecas? Como manter o projeto com as verses mais recentes das bibliotecas? Como as bibliotecas e recursos de compilao, execuo e teste devem ser separados? Existe alguma forma de executar todos os testes durante o processo de construo e obter um percentual de cobertura dos testes? possvel executar testes para mensurar a qualidade do cdigo ou medir desempenho durante o processo de construo? possvel executar testes de integrao durante o processo de construo? Como separar os scripts para diferentes atividades de construo?

O Maven busca resolver estas questes fornecendo um modelo de construo que pode ser reutilizado por todos os projetos de software. O Maven abstrai a estrutura do projeto e seu contedo, seguindo os princpios da conveno sobre a configurao, execuo declarativa do processo de ciclo de vida do desenvolvimento, reso da lgica de construo entre projetos e organizao lgica das dependncias dos projetos. Em resumo, o Maven: Define como o projeto tipicamente construdo. Utiliza convenes para facilitar a configurao do projeto e assim, sua construo.

Eteg Tecnologia da Informao Ltda

11

Introduo ao Apache Maven


Ajuda os usurios a compreender e organizar melhor a complexa estrutura dos projetos e suas variaes. Prescreve e fora a utilizao de um sistema de gerenciamento de dependncias comprovadamente eficaz, permitindo que times de projeto em locais diferentes compartilhem bibliotecas. flexvel para usurios avanados, permitindo que definies globais sejam redefinidas e adaptadas de forma declarativa (alterando-se a configurao, alterando metadados ou atravs da criao de plug-ins). extensvel. Est em constante evoluo, incorporando novas prticas e funcionalidades identificadas como comuns em comunidades de usurios.

12

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Ant versus Maven


Ant versus Maven

O Ant outra ferramenta para configurao comumente utilizada


Critrio Ant Muito fcil 5 minutes 10 minutos para adicionar um novo alvo Maven Muito fcil 15 minutos 2 minutos para adicionar uma nova meta (goal). 2 horas. Pode ser confuso no incio. Sim (pode ser bom, pois todos os seus projetos seguem o mesmo layout) Sim, nativo com o Maven Reactor. Sim Sim, mas bsica Sim, nativo

Instalao Tempo para iniciar um novo projeto Tempo para adicionar uma nova funcionalidade Tempo de aprendizado para um novo desenvolvedor Layout padro?

30 minutos. Muito fcil para se entender e suporte por parte de ferramentas que muito bom. No (pode ser bom, voc pode alter-lo como quiser) Sim, mas voc tem que criar toda a lgica para tratar mltiplos projetos. Nativamente, no, mas existem plug-ins. Sim e muito boa Sim, mas requer plug-in (Ivy)

Suporte a mltiplos projetos? Gerao de documentao Integrao com IDEs? Gerncia de dependncias?

O Apache Ant outra ferramenta comumente utilizada para a construo de projetos. Mas qual a diferena entre o Ant e o Maven? Primeiramente, importante esclarecer que cada ferramenta d nfase a um aspecto do problema de construo de aplicao. O Ant uma ferramenta multiplataforma para construir projetos escritos em Java. Maven, por sua vez, descreve o projeto em um nvel mais alto toma emprestadas vrias tarefas do Ant. A tabela a seguir mostra algumas diferenas entre as ferramentas em mais alto nvel:
Critrio Instalao Tempo para iniciar um novo projeto Tempo para adicionar uma nova funcionalidade Tempo de aprendizado para um novo desenvolvedor Layout padro? Suporte a mltiplos projetos? Ant Muito fcil 5 minutes 10 minutos para adicionar um novo alvo 30 minutos. Muito fcil para se entender e suporte por parte de ferramentas que muito bom. No (pode ser bom, voc pode alter-lo como quiser) Sim, mas voc tem que criar toda a lgica para tratar mltiplos projetos. Nativamente, no, mas existem plug-ins. Sim e muito boa Sim, mas requer plug-in (Ivy) Maven Muito fcil 15 minutos 2 minutos para adicionar uma nova meta (goal). 2 horas. Pode ser confuso no incio. Sim (pode ser bom, pois todos os seus projetos seguem o mesmo layout) Sim, nativo com o Maven Reactor. Sim Sim, mas bsica Sim, nativo

Gerao de documentao Integrao com IDEs? Gerncia de dependncias?

Eteg Tecnologia da Informao Ltda

13

Introduo ao Apache Maven

Modelo de Objetos de Projetos (POM)


Modelo de Objetos de Projeto (POM)

Define as informaes necessrias para que o Maven possa executar um conjunto de metas e o software seja construdo. O POM formado pelo POM interno do Maven e pelo contedo do arquivo pom.xml. O pom.xml formado por vrios elementos que:

Permitem configurar informaes sobre o projeto (equipe, controle de verso, licena, etc). Permitem configurar as dependncias Permitem configurar os plug-ins do Maven Definir e configurar relatrios a serem gerados

O Modelo de Objetos de Projeto (POM, em ingls) define as informaes necessrias para que o Maven possa executar um conjunto de metas e que a construo do software possa ser realizada. A representao do POM feita atravs de um arquivo XML chamado pom.xml. No conceito do Maven, o projeto um conceito que vai alm de um conjunto de arquivos. O projeto contm arquivos de configurao, uma lista de desenvolvedores que atuam em papis, um sistema de controle de ocorrncias (issues), informaes sobre a empresa e licenas, a URL onde o projeto reside, as dependncias e todo o cdigo que d vida ao projeto. De fato, para o Maven, um projeto no precisa ter nada mais do que um simples arquivo pom.xml.

Figura 3: Estrutura de elementos componentes do POM

A estrutura do pom.xml
14
Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven


A estrutura do POM grande e complexa, como pode ser visto na figura anterior. Ao longo do curso, veremos vrias destas estruturas. Um esqueleto do arquivo pom.xml pode ser visto a seguir: <project> <modelVersion>4.0.0</modelVersion> <!-- POM Relationships --> <groupId>...</groupId> <artifactId>...</artifactId> <version>...</version> <parent>...</parent> <dependencyManagement>...</dependencyManagement> <dependencies>...</dependencies> <modules>...</modules> <!-- Project Information --> <name>...</name> <description>...</description> <url>...</url> <inceptionYear>...</inceptionYear> <licenses>...</licenses> <developers>...</developers> <contributors>...</contributors> <organization>...</organization> <!-- Build Settings --> <packaging>...</packaging> <properties>...</properties> <build>...</build> <reporting>...</reporting> <!-- Build Environment --> <!-- Environment Information --> <issueManagement>...</issueManagement> <ciManagement>...</ciManagement> <mailingLists>...</mailingLists> <scm>...</scm> <!-- Maven Environment --> <prerequisites>...</prerequisites> <repositories>...</repositories> <pluginRepositories>...</pluginRepositories>

Eteg Tecnologia da Informao Ltda

15

Introduo ao Apache Maven


<distributionManagement>...</distributionManagement> <profiles>...</profiles> </project>

16

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Repositrio Maven
Repositrios Maven

Podem ser locais ou remotos O repositrio local sempre pesquisado primeiro a procura de artefatos.
Settings\USUARIO\.m2 ou ~/.m2.

Geralmente, se encontra em C:\Documents and

Os repositrios remotos so pesquisados quando no se encontra um artefato no repositrio local.

Se o artefato no for encontrado em lugar algum,


um erro gerado.

Como foi dito anteriormente, o Maven utiliza dois tipos de repositrios para armazenar os artefatos: o local e o remoto.

Repositrio local
O repositrio local armazena os artefatos localmente no seu computador. criado um diretrio .m2 no seu diretrio de usurio (no Unix, ~/.m2 e no Windows, C:\Documents and Settings\USUARIO\.m2). Os artefatos locais so acessados rapidamente e so consultados sempre que o Maven precisa resolver uma dependncia ou executar um plug-in. Quando um artefato necessrio no est presente no repositrio local, feita uma consulta a um ou mais repositrios remotos.

Eteg Tecnologia da Informao Ltda

17

Introduo ao Apache Maven

Figura 4: Exemplo de repositrio local (esq.) e remoto (dir.)

Repositrio remoto
O repositrio remoto pode estar em um dos vrios repositrios Maven espalhados pela internet ou mesmo na sua intranet. O principal repositrio remoto atualmente o site http://repo1.maven.org/maven2. Vrios projetos de cdigo livre publicam suas bibliotecas nestes repositrios remotos. Assim, se seu projeto utilizar algum framework de cdigo livre comumente utilizado (como Hibernate ou Spring), com muita chance as ltimas verses das bibliotecas estaro disponveis para download por parte do Maven. Importante: A lista de repositrios remotos configurada no arquivo $MAVEN/conf/settings.xml (global) ou $USERHOME/.m2/settings.xml (usurio), onde $USERHOME o diretrio pessoal do usurio.

Localizando artefatos
Baseando-se na informao de dependncia descrita no POM, o Maven tentar resolver as dependncias na seguinte ordem: 1. A dependncia procurada no repositrio local. 2. A dependncia procurada em todos os repositrios remotos configurados. 3. Falhando 1 e 2, um erro reportado. O elemento <repositories> no arquivo settings.xml pode ser utilizado para configurar repositrios remotos. Um ponto positivo do Maven que com a utilizao de repositrios locais, garantido que apenas uma cpia do artefato mantida, independentemente se um ou vrios projetos fazem uso dele. Isto evita que ocorram conflitos especialmente quando se utilizam mltiplos projetos.

18

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Repositrios e Coordenadas
Repositrios e Coordenadas

Artefatos geralmente so empacotados na forma de bibliotecas Java (JAR). Para indexar um repositrio, o Maven utiliza o conceito de coordenadas:

Identificam de forma nica um artefato. So formadas por trs partes: Group Id, Artefact
Id e verso.
<dependencies> <dependency> <groupId>br.com.eteg</groupId> <artifactId>CalculadoraCientifica</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>

Um artefato geralmente empacotado e distribudo na forma de um arquivo JAR contendo uma biblioteca binria ou um executvel. Na prtica, um artefato tambm pode ser um arquivo WAR ou EAR, arquivo tpicos da plataforma Java para empacotamento. Para indexar a coleo de artefatos armazenados nos repositrios, o Maven utiliza a estrutura de diretrios do sistema de arquivos do sistema operacional. A indexao do repositrio se baseia no fato de que um artefato pode ser identificado de forma nica por meio de suas coordenadas.

Coordenadas
Uma coordenada para o Maven um conjunto de valores que identificam de forma nica um artefato. Uma coordenada composta de trs partes de informao, separadas por hfens: Group ID: A entidade ou organizao responsvel pela produo do artefato. Por exemplo, br.com.eteg pode ser um group id. Artifact ID: Nome do artefato. Por exemplo, para um projeto com uma classe chamada CalculadoraCientifica pode usar tambm este nome. Verso: Um nmero de verso para o artefato formato suportado segue a forma mmm.nnn.bbb-qqqqqqq-dd , onde mmm verso maior, nnn a menor verso e bbb o nvel da correo de bugs. Opcionalmente, qqqqq (qualificador) ou dd (nmero da construo - build number) tambm podem ser adicionados ao nmero da verso.

As coordenadas do Maven so usadas tanto na configurao do repositrio quanto no POM. Por exemplo, para especificar uma dependncia a um projeto chamado CalculadoraCientifica, na verso 1.0-SNAPSHOT, um arquivo pom.xml inclui uma declarao como esta: ... <dependencies>
Eteg Tecnologia da Informao Ltda

19

Introduo ao Apache Maven


<dependency> <groupId>br.com.eteg</groupId> <artifactId>CalculadoraCientifica</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> ... Importante: o qualificador SNAPSHOT especial e indica para o Maven que o projeto est em desenvolvimento e portanto para recuperar a verso mais recente disponvel. Para especificar a dependncia de um projeto conhecido como o Junit, verso 3.8.2, podemos usar a seguinte coordenada: <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.2</version> </dependency> </dependencies> Como o repositrio do Maven nada mais do que uma organizao em rvore, voc pode ver os artefatos armazenados em disco. A figura a seguir mostra o artefato Junit JUnit 3.8.2:

20

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Figura 5: Organizao do repositrio segundo coordenadas

Eteg Tecnologia da Informao Ltda

21

Introduo ao Apache Maven

Introduo aos Plug-ins


Introduo aos Plug-ins

A maior parte das tarefas executadas pelo Maven so feitas por meio de plug-ins. Um plug-in formado por um ou mais mojos, que so as menores unidades de execuo do Maven. Alguns plug-ins esto associados a fases do ciclo de vida e so executados automaticamente.

Por exemplo, o plugin maven-compile executado para a fase compile

Uma meta (goal) so tarefas no Maven. Ao executar um mojo, estamos executando uma meta.

Exemplo: mvn jar:jar

A maior parte das tarefas realizadas pelo Maven so feitas por meio de plug-ins. O Maven atua como um maestro na coordenao das aes dos plug-ins.

Instalao de plug-ins
Maven traz consigo vrios plug-ins pr-configurados, que baixam quaisquer dependncias pela internet, sem necessidade de configuraes. A maior parte dos projetos de software usar esse conjunto pr-configurado e raramente necessitar de plug-ins adicionais. Dica: Consulte o site http://maven.apache.org/plugins/ para obter uma lista de plugins disponveis.

Mojos em plug-ins
Plug-ins so mdulos de software que se enquadram no modelo de extenso do Maven. Os plug-ins podem ser criados em Java, Ant ou Beanshell. Cada tarefa dentro do plug-in chamada mojo. Em muitos casos, um plug-in pode ser visto como um conjunto de mojos. Um mojo executado pelo mecanismo do Maven durante o ciclo de vida da construo do projeto. Cada mojo est associado a uma ou mais fases. Para listar os mojos de um plug-in, basta digitar, mvn P plugin, como por exemplo: mvn P jar

Fases do ciclo de vida (tpico opcional)


O ciclo de vida da construo do projeto est dividido em fases, conforme a figura a seguir:

22

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Figura 6: Fases do ciclo de vida do Maven

Para que uma fase seja executada, todas as outras anteriores devem tambm ser executadas. Por exemplo, para executar a fase compile, as fases validate, initialize, generate sources, process sources, generate resources e process resources necessariamente sero executadas. Para disparar uma fase do ciclo de vida de construo, basta executar o comando mvn nome_da_fase. Por exemplo: mvn compile Dica: A diferena de um comando Maven que est associado a uma fase e a um plugin que no caso de fases, o comando no tem dois-pontos (:) e corresponde exatamente a uma fase do ciclo.

Goals
Goals (ou metas em portugus) goal so tarefas na terminologia do Maven. Geralmente, as metas so especificadas como argumentos para o Maven na linha de comando, mas algumas metas podem ser chamadas por outras metas. Metas so disponibilizadas por plug-ins instalados ou na forma de script no arquivo maven.xml. Para visualizar todas as metas disponveis, utilize o comando maven g

Eteg Tecnologia da Informao Ltda

23

Introduo ao Apache Maven

Reviso e Laboratrio
Reviso e Laboratrio

1- Cite algumas das funcionalidades do Maven que podem ser utilizadas para o desenvolvimento de softwares. 2- O que o Project Object Model (POM) do Maven? 3- Qual a finalidade dos plug-ins do Maven? 4- Quais so os tipos de repositrios de artefatos do Maven? Qual destes tipos sempre verificado primeiro a procura de artefatos? Por qu? 5- O que uma coordenada para o Maven? Como ela representada no sistema de arquivos?

24

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Captulo 2: Instalao, Utilizao e Principais Recursos

Eteg Tecnologia da Informao Ltda

25

Introduo ao Apache Maven

Instalando o Maven 2
Instalando o Maven 2

Pr-requisitos:

JDK 1.4 ou posterior. Memria e disco: no h requisito mnimo; para


repositrio local, aproximadamente 100Mb de espao livre. Sistema operacional: os principais suportados pelo Java.

Instalao

Baixe os arquivos do site http://maven.apache.org Descompacte-os Adicione o diretrio bin do Maven ao PATH do sistema.

Pr-requisitos
JDK Memria Disco Sistema operacional 1.4 ou posterior (para a execuo do Maven, mas voc pode compilar cdigo para as verses 1.3 e anteriores) No h um mnimo, depende do processo de construo. Geralmente, 64Mb No h mnimo. Aproximadamente 100MB para repositrio local tpico. O Maven foi testado no Windows XP, Fedora Core e Mac OS X. Teoricamente, funciona em qualquer sistema onde uma mquina virtual compatvel funcione.

Instalao
O primeiro passo fazer o download no site http://maven.apache.org. Em seguida, descompactar os arquivos em algum diretrio a sua escolha, que iremos referenciar neste curso como $MAVEN. Adicionar o diretrio $MAVEN/bin varivel PATH. Para verificar a instalao, execute no prompt/shell de comando o seguinte comando: mvn -help

26

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Criando o Primeiro Projeto com Archetype


Criando o Primeiro Projeto com Archetype

O primeiro projeto uma biblioteca para calculadora financeira:

Funes rate(), nper(), pmt() e pv()

Para criar o projeto:


mvn archetype:create -DgroupId=br.com.eteg \ -DartifactId=CalculadoraFinanceira

As bibliotecas necessrias para o plug-in que no estiverem no repositrio local sero baixadas automaticamente Para criar um projeto para o IDE Eclipse:
mvn eclipse:eclipse

Nesta e nas prximas sees, vamos criar um pequeno projeto para ilustrar o funcionamento do Maven. O projeto uma calculadora financeira, que possui as seguintes operaes: rate(), nper(), pmt() e pv(). Para criar um projeto de partida, execute o comando: mvn archetype:create -DgroupId=br.com.eteg \ -DartifactId=CalculadoraFinanceira Nota: Sempre que um plug-in necessitar de bibliotecas que no esto no repositrio local, o Maven tentar baix-las dos repositrios remotos, por isto, certifique-se de ter uma conexo com a internet. Este comando (que deve estar na mesma linha) criar o arqutipo (archetype) do projeto, gerando um arquivo pom.xml como este: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>br.com.eteg</groupId> <artifactId>CalculadoraFinanceira</artifactId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>CalculadoraFinanceira</name> <url>http://maven.apache.org</url> <dependencies> <dependency>

Eteg Tecnologia da Informao Ltda

27

Introduo ao Apache Maven


<groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project> No necessrio informar a verso para o plugin Archetype, pois o default 1.0SNAPSHOT. Em seguida, crie o projeto para o Eclipse: mvn eclipse:eclipse O cdigo (com partes suprimidas) para a classe CalculadoraFinanceira : public class CalculadoraFinanceira { pv, public static double fv(double rate, int nPer, double pmt, double int due) throws DataException {...} public static double pmt(double rate, int nper, double pv, double fv, int due) throws DataException {...} public static int nPer(double rate, double pmt, double pv, double fv, int due) throws DataException {...} public static double pv(double rate, int nPer, double pmt, double fv, int due) throws DataException {...} public static double rate(int nPer, double pmt, double pv, double fv, int due, double guess) throws DataException {...} } Aps adicionar o cdigo-fonte e outra classe (DataException) para tratamento de exceo, o projeto ficou conforme a figura a seguir:

A classe App foi alterada para o seguinte cdigo: package br.com.eteg; import java.text.DecimalFormat;

28

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven


import br.com.eteg.calculadora.financeira.CalculadoraFinanceira; import br.com.eteg.calculadora.DataException; public class App { public static void main(String[] args) { try { System.out.println( new DecimalFormat("R$ ###,##0.00").format( CalculadoraFinanceira.pmt(0.1, 10, -10000, 0, 0))); } catch (DataException e) { e.printStackTrace(); } } } O resultado impresso ao executar : R$ 1.627,45.

Eteg Tecnologia da Informao Ltda

29

Introduo ao Apache Maven

O Plug-in Archetype
O Plug-in Archetype

Permite criar a primeira verso do POM para o projeto Existem vrios modelos de projetos disponveis

Para visualizar a lista, use o comando:


mvn archetype:generate

Exemplo da criao de uma aplicao web:


mvn archetype:create -DgroupId=br.com.eteg \ -DartifactId=exemploWeb \ -DarchetypeArtifactId=maven-archetype-webapp

O plug-in archetype, como vimos, serve para criar a primeira verso do POM para o projeto. Cada projeto que usado como modelo chamado de archetype, da o nome do plug-in. Existem vrios modelos de projeto que podem ser utilizados. Uma forma de ver todos os que esto disponveis executar a meta generate: mvn archetype:generate Ser exibida uma lista de todos os modelos disponveis e ser solicitado que voc informe o nmero do modelo a ser utilizado. Uma forma mais direta de se utilizar o plug-in especificar qual archetype deve ser usado. Por exemplo: mvn archetype:create -DgroupId=br.com.eteg \ -DartifactId=exemploWeb -DarchetypeArtifactId=maven-archetype-webapp No exemplo anterior, ser criado um projeto para uma aplicao web em Java.

30

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Alterando o POM
Alterando o POM

Alterar a forma de <packaging>jar</packaging> empacotamento (JAR, EAR, WAR, <name>CalculadoraFinanceira</name> POM) <url>http://maven.apache.org</url> Alterar o nome e a URL do projeto <dependencies> <dependency> Adicionar <groupId>junit</groupId> dependncias <artifactId>junit</artifactId> <version>3.8.1</version> Configurar <scope>test</scope> plugins </dependency>
</dependencies>

O Maven configurado para construir seu projeto atravs do arquivo pom.xml. Conforme vimos anteriormente, o plug-in Archetype permite gerar um arquivo pom.xml padro, onde informamos as coordenadas. Vamos analisar outras sees do arquivo pom.xml: <packaging>jar</packaging> Este elemento permite configurar como ser empacotado o projeto. No nosso caso, por ser uma biblioteca, vamos utilizar o formato JAR. <name>CalculadoraFinanceira</name> <url>http://maven.apache.org</url> Estes elementos permitem configurar o nome e a URL para o projeto. <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> O elemento dependencies permite configurar dependncias para o projeto e especificar qual o escopo. No caso, h uma dependncia da biblioteca JUnit, para testes unitrios. Note que o escopo apenas test, logo, a biblioteca no necessria em outras etapas do ciclo de vida de construo. Veremos mais sobre dependncias nos prximos captulos.

Eteg Tecnologia da Informao Ltda

31

Introduo ao Apache Maven


Muitas outras configuraes podem ser feitas no pom.xml. Por exemplo, podemos configurar plug-ins que so executados em algum momento do ciclo de vida: <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins> </build> No exemplo, estamos indicando ao plugin compiler que ele dever compilar as classes de forma que elas sejam compatveis com a verso 1.5 do Java (o default 1.4, que no suporta funcionalidades mais recentes, como generics).

32

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Compilando e Testando o Projeto


Compilando e Testando o Projeto

Para compilar o projeto, execute a fase compile:


mvn compile

Antes de testar o projeto, necessrio criar testes unitrios.

Para testar, execute a fase test:


mvn test

Para compilar um projeto, execute a fase compile do Maven: C:\curso\CalculadoraFinanceira>mvn compile [INFO] Scanning for projects... [INFO] ----------------------------------------------------------------[INFO] Building CalculadoraFinanceira [INFO] task-segment: [compile] [INFO] ----------------------------------------------------------------[INFO] [resources:resources] [INFO] Using default encoding to copy filtered resources. [INFO] [compiler:compile] [INFO] Compiling 3 source files to C:\curso\CalculadoraFinanceira\target\classes [INFO] ----------------------------------------------------------------[INFO] BUILD SUCCESSFUL [INFO] ----------------------------------------------------------------[INFO] Total time: 3 seconds [INFO] Finished at: Thu Oct 23 22:22:10 BRT 2008 [INFO] Final Memory: 3M/10M [INFO] ----------------------------------------------------------------Antes de testar, necessrio criar um arquivo de teste. No diretrio src/test/java do projeto gerado, foi adicionado um pacote chamado br.com.eteg.calculadora.financeira e nele includa a classe CalculadoraFinanceiraTest: package br.com.eteg.calculadora.financeira;

Eteg Tecnologia da Informao Ltda

33

Introduo ao Apache Maven


import junit.framework.TestCase; public class CalculadoraFinanceiraTest extends TestCase { public void testPmt() throws DataException { double result = CalculadoraFinanceira.pmt(0.05, 36, -10000, 0, 0); assertEquals(604.34, result, 0.01); } public void testNPer() throws DataException { int result = CalculadoraFinanceira.nPer(0.05, 1000, -10000, 0, 1); assertEquals(14, result); } public void testRate() throws DataException { double result = CalculadoraFinanceira.rate(60, -1000, 0, 100000, 0, 0.01); assertEquals(1.61, result * 100, 0.01); } public void testPv() { try { CalculadoraFinanceira.pv(10, -60, 0, 0, 1); fail("Excecao nao foi levantada"); } catch (DataException e) { e.printStackTrace(); } } public void testFv() { fail("Not yet implemented"); } } No objetivo do curso explicar testes unitrios, mas entenda que 4 dos 5 testes iro passar. O ltimo (testeFv()) falha porque no foi implementado. Para executar os testes do projeto, basta executar o comando: mvn test O resultado o seguinte: C:\curso\CalculadoraFinanceira>mvn test [INFO] Scanning for projects...
Eteg Tecnologia da Informao Ltda

34

Introduo ao Apache Maven


[INFO] ----------------------------------------------------------------[INFO] Building CalculadoraFinanceira [INFO] task-segment: [test] [INFO] ----------------------------------------------------------------[INFO] [resources:resources] [INFO] Using default encoding to copy filtered resources. [INFO] [compiler:compile] [INFO] Nothing to compile - all classes are up to date [INFO] [resources:testResources] [INFO] Using default encoding to copy filtered resources. [INFO] [compiler:testCompile] [INFO] Nothing to compile - all classes are up to date [INFO] [surefire:test] [INFO] Surefire report directory: C:\eclipse\workspace\CalculadoraFinanceira\target\surefire-reports ------------------------------------------------------T E S T S ------------------------------------------------------Running br.com.eteg.calculadora.financeira.CalculadoraFinanceiraTest Tests run: 5, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.11 sec <<< FAILURE! Running br.com.eteg.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.015 sec Results : Failed tests: testFv(br.com.eteg.calculadora.financeira.CalculadoraFinanceiraTest) Tests run: 6, Failures: 1, Errors: 0, Skipped: 0 [INFO] ----------------------------------------------------------------[ERROR] BUILD FAILURE [INFO] ----------------------------------------------------------------[INFO] There are test failures. Please refer to C:\curso\CalculadoraFinanceira\target\surefire-reports for the individual test results. [INFO] ----------------------------------------------------------------[INFO] For more information, run Maven with the -e switch

Eteg Tecnologia da Informao Ltda

35

Introduo ao Apache Maven


[INFO] ----------------------------------------------------------------[INFO] Total time: 3 seconds [INFO] Finished at: Thu Oct 23 23:06:32 BRT 2008 [INFO] Final Memory: 4M/8M [INFO] ----------------------------------------------------------------Os resultados dos testes esto disponveis no diretrio surefire-reports.

36

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Empacotando e Disponibilizando Localmente


Empacotando e Disponibilizando Localmente

Para empacotar o projeto (no exemplo, uma biblioteca JAR):


mvn package mvn jar:jar

Para instalar a biblioteca no repositrio local, execute a fase install:


mvn install

Para empacotar o projeto, isto , gerar, neste caso, uma biblioteca Java no formato JAR, basta executar o plug-in jar ou ento a fase package: C:\curso\CalculadoraFinanceira>mvn jar:jar [INFO] Scanning for projects... [INFO] Searching repository for plugin with prefix: 'jar'. [INFO] ----------------------------------------------------------------[INFO] Building CalculadoraFinanceira [INFO] task-segment: [jar:jar] [INFO] ----------------------------------------------------------------[INFO] [jar:jar] [INFO] Building jar: C:\ CalculadoraFinanceira\target\CalculadoraFinanceira-1.0-SNAPSHOT.jar [INFO] ----------------------------------------------------------------[INFO] BUILD SUCCESSFUL [INFO] ----------------------------------------------------------------[INFO] Total time: 3 seconds [INFO] Finished at: Thu Oct 23 23:10:53 BRT 2008 [INFO] Final Memory: 4M/8M [INFO] ----------------------------------------------------------------Note que o arquivo gerado tem o formato do nome conforme as coordenadas do Maven e inclui tambm a verso. Para instalar a biblioteca no repositrio local do Maven, basta executar: mvn install

Eteg Tecnologia da Informao Ltda

37

Introduo ao Apache Maven


Note que se ocorrer algum erro nos testes, o Maven reportar o erro. Isto porque o comando mvn install tambm executa os testes e o empacotamento. No caso do projeto exemplo, necessrio corrigir o teste que causa o problema antes de instalar a biblioteca no repositrio local.

Utilizando a fase package


Ao invs de executar o comando mvn jar:jar (que executa uma meta), tambm podemos escolher empacotar a aplicao executando uma fase do ciclo de vida especfica para este fim: package. Esta fase, alm de executar a meta jar:jar, tambm executa a fase de compilao, testes e a meta jar:jar: mvn package

38

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Gerando Documentao Javadoc


Gerando Documentao Javadoc

A documentao no formato Javadoc apresenta os detalhes das classes, pacotes, mtodos e variveis que compem o projeto Java Para gerar a documentao:

mvn javadoc:javadoc mvn javadoc:jar

Uma das grandes novidades que Java ajudou a popularizar foi a documentao da API das classes atravs da ferramenta Javadoc. possvel utilizar a ferramenta Javadoc atravs do prprio Maven. Os arquivos so gerados em $PROJECT/target/site/apidocs, onde $PROJECT o diretrio do projeto. Para isto, utilize o comando: mvn javadoc:javadoc Se voc quiser, tambm pode gerar a documentao e imediatamente empacot-la em um arquivo JAR: mvn javadoc:jar Dica: Nos prximos captulos veremos como integrar a gerao do Javadoc junto com a documentao do site.

Figura 7: Documentao Javadoc

Eteg Tecnologia da Informao Ltda

39

Introduo ao Apache Maven

40

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Configurando o Maven para uso com o Eclipse


Configurando o Maven para uso com o Eclipse

O Maven possui algumas metas para integrao com o Eclipse:


eclipse:eclipse eclipse:clean

eclipse:configure-workspace

O Eclipse possui um bom plug-in para integrao com o Maven, o m2Eclipse (gratuito) Entretanto, voc pode escolher utilizar os recursos que o Eclipse j prov (atravs da opo External Tools)

J vimos que o Maven possui um plug-in para gerar o projeto para o Eclipse. Este plug-in tem as seguintes metas (mojos):
eclipse:configure-workspace eclipse:eclipse eclipse:clean Usado para adicionar a varivel M2_REPO ao Eclipse. Isto pode ser feito no prprio Eclipse, atravs do menu Window>Preferentes, opo Java>Build Path>Classpath Variables Cria os arquivos de configurao do Eclipse Exclui os arquivos usados pelo Eclipse

Mas, e o contrrio? Como utilizar o Maven dentro do Eclipse? Para isto, podemos usar um plug-in para o IDE. Um dos mais famosos o m2eclipse, disponvel em http://m2eclipse.codehaus.org.

Figura 8: m2Eclipse integrado ao Eclipse

Mas para utilizar o Maven com o Eclipse, no necessrio um plug-in. Muitos preferem configur-lo como uma ferramenta externa, pois um novo plug-in pode deixar o Eclipse mais sobrecarregado e lento. Consulte a documentao do Eclipse para saber como configurar uma ferramenta externa. A pgina http://blog.danielfmartins.com/2007/05/16/debugando-uma-aplicacao-maven-com-

Eteg Tecnologia da Informao Ltda

41

Introduo ao Apache Maven


o-eclipse/ contm um detalhamento sobre o procedimento, inclusive com opo de depurao.

42

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Definindo Dependncias para o Projeto


Definindo Dependncias para o Projeto

Altere o arquivo pom.xml

Inclua um ou mais elementos dependency

possvel eliminar a transitividade Novos repositrios remotos podem ser includos na lista de pesquisa

<project> <!-- partes omitidas --> ... <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version > <scope>test</scope > </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version > <scope>compile</scope > </dependency> </dependencies> <!-- partes omitidas --> ... </project>

Projetos Java geralmente fazem uso de muitas bibliotecas existentes, afinal, no h necessidade de ficar sempre inventando a roda. Bibliotecas utilitrias, como a do log4j, do Apache Commons e de frameworks como Spring e Hibernate so publicadas constantemente nos principais repositrios do Maven. Para o Maven, qualquer dependncia que esteja registrada para um projeto tida como um artefato.

Alterando o arquivo pom.xml para incluir dependncias


A seo dependencies do arquivo pom.xml lista todas as dependncias externas que o projeto necessita para que ele seja construdo. Para cada dependncia, necessrio definir as informaes sobre groupId, artifactId, version e scope, ou seja, necessrio informar as coordenadas e o momento em que a dependncia utilizada. O valor para o elemento scope poder ser runtime, test, provided e compile. Se scope no for informado, significa que so todos eles. Provided usado para bibliotecas que esto disponveis em servidores de aplicao, como por exemplo, as bibliotecas para a API Servlet. Exemplo: <project> <!-- partes omitidas --> ... <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version > <scope>test</scope > </ dependency> <dependency>

Eteg Tecnologia da Informao Ltda

43

Introduo ao Apache Maven


<groupId>log4j</groupId> <artifactId>log4j</ artifactId > <version>1.2.12</version > <scope>compile</scope > </ dependency> </dependencies> <!-- partes omitidas --> ... </project> No exemplo anterior, foram definidas dependncias para duas bibliotecas: log4j e JUnit. Dica: Uma pesquisa na internet pode retornar um ou mais arquivos pom.xml que contm exatamente a configurao para a dependncia que voc precisa.

Eliminando a transitividade
O Maven tem como um dos seus principais pontos fortes a gerncia de dependncias. As principais caractersticas do gerenciador de dependncias do Maven incluem a dependncia transitiva. Para a dependncia transitiva, possvel interromper a transitividade. Isto til quando vrias bibliotecas dependem de verses especficas de outra biblioteca e voc s quer que a mais recente seja utilizada. Para eliminar uma biblioteca com a transitividade habilitada, podemos utilizar o elemento exclusions no elemento dependency: <dependency> <groupId>org.acegisecurity</groupId> <artifactId>acegi-security</artifactId> <version>1.0.6</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-support</artifactId> </exclusion> </exclusions> </dependency> No exemplo anterior, foi definida uma dependncia ao artefato acegi-security, mas foi indicado que no para transitar a dependncia para o artefato spring-support.

Incluindo repositrios
Alguns projetos podem publicar seus artefatos em repositrios remotos diferentes daqueles pesquisados pelo Maven por padro. Tambm possvel que voc queira criar um repositrio remoto Maven na sua intranet. Nestes casos, possvel especificar repositrios adicionais para o Maven atravs do arquivo pom.xml: <project> <!-- partes omitidas -->

44

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven


<repositories> <repository> <id>maven</id> <name>maven</name> <url>http://repo1.maven.org/maven2/</url> </repository> <repository> <id>intranet</id> <name>Intranet Eteg</name> <url>http://intranet.eteg.net/java/mvn</url> </repository> </repositories> <!-- partes omitidas --> </project> necessrio especificar o identificador e a URL do repositrio e opcionalmente o seu nome. Os repositrios so pesquisados na ordem em que aparecem no pom.xml.

Eteg Tecnologia da Informao Ltda

45

Introduo ao Apache Maven

Reviso e Laboratrio
Reviso e Laboratrio

1- Qual comando utilizado para acionar o Maven? 2- Utilizando plug-in archetype, escreva a linha de comando para se criar um arcabouo de projeto Maven cujo grupo seja br.com.minhaempresa e o identificador do artefato seja curso. 3- Qual comando utilizado para compilar um projeto gerenciado pelo Maven? No caso, voc est utilizando uma fase do ciclo de vida de construo ou um plug-in? Como voc sabe? 4- Por que ao executar a fase test, o Maven sempre executa a fase compile antes? 5- Qual comando utilizado para disponibilizar um artefato no repositrio local? 6- Como podem ser definidas dependncias em projetos gerenciados pelo Maven?

46

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Captulo 3: Trabalhando com vrios Projetos

Eteg Tecnologia da Informao Ltda

47

Introduo ao Apache Maven

Motivao
Motivao

Em projetos maiores, necessrio fazer uma segmentao em mdulos. O Maven facilita a gesto de construo de projetos compostos por vrios mdulos. Para o exemplo, usaremos os seguintes mdulos:
web application AplicacaoTeste CalculadoraFinanceira

pkg Business Process Model

CalculadoraEstatistica

At agora, trabalhamos com um projeto s e foi relativamente fcil utilizar o Maven. Entretanto, em muitos casos, ser necessrio trabalhar com um conjunto de diferentes projetos, a fim de se manter uma boa modularizao. Por exemplo, podemos ter bibliotecas separadas das aplicaes web ou mesmo duas ou mais aplicaes web. Organizar tudo isto, onde temos vrias dependncias intra-projetos e com artefatos externos, pode ser muito complicado. Felizmente, o Maven foi projetado para simplificar o trabalho. Havamos criado um projeto para a CalculadoraFinanceira, mas novos requisitos exigem agora que uma calculadora estatstica seja criada. Esta calculadora ir avaliar a mdia, mediana e desvio padro de uma amostra de dados. Finalmente, tambm se exigiu que fosse disponibilizada uma aplicao web que permita entrar com os dados para as funes e obter o resultado do clculo. Desta forma, podemos ver os projetos e as inter-dependncias como no diagrama a seguir:
pkg Business Process Model we b a p pl i ca ti o n AplicacaoTeste CalculadoraFinanceira

CalculadoraEstatistic a

Figura 9: Inter-dependncias entre os projetos para o curso

Neste captulo vamos utilizar o Maven para construir todos esses projetos.

48

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Definindo o Projeto Principal (Master)


Definindo o Projeto Principal (Master)

O projeto principal necessrio para que o Maven possa gerenciar a construo multiprojetos.

formado simplesmente por um arquivo pom.xml necessrio especificar quais mdulos compem
o projeto As dependncias podem ser especificadas no projeto principal e herdadas pelos mdulos

Quando trabalhamos com vrios projetos ou mdulos de cdigo que formam um projeto de desenvolvimento de software, precisamos criar um projeto principal para que o Maven possa construir toda a aplicao. O projeto principal formado simplesmente pelo arquivo pom.xml. Geralmente, este arquivo estar no diretrio que contm os subdiretrios para os mdulos, como ilustrado na figura a seguir:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>


Eteg Tecnologia da Informao Ltda

49

Introduo ao Apache Maven


<groupId>br.com.eteg</groupId> <artifactId>ProjetoCalculadora</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <name>Projeto Calculadora para Curso</name> <description> Projeto usado para testes no curso de Maven da Eteg. </description> <url>http://maven.apache.org</url> <modules> <module>CalculadoraFinanceira</module> <module>CalculadoraEstatistica</module> <module>AplicacaoTeste</module> </modules> <dependencyManagement> <dependencies> <dependency> <groupId>br.com.eteg</groupId> <artifactId>CalculadoraFinanceira</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>br.com.eteg</groupId> <artifactId>CalculadoraEstatistica</artifactId> <version>${project.version}</version> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project> Primeiramente, necessrio definir o identificador do artefato por meio do elemento artifactID (no caso, ProjetoCalculadora). Para informar que se trata de mltiplos projetos o elemento packaging deve ser igual a pom.

Organizao de dependncias
50
Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven


O marcador modules especifica que o projeto formado por 3 mdulos: CalculadoraFinanceira, CalculadoraEstatistica e AplicacaoTeste. Os submdulos do projeto podem herdar propriedades do seu arquivo pom.xml. Isto significa que nenhum dos trs submdulos precisa declarar a dependncia ao artefato junit (ou qualquer outro que porventura estivesse no projeto principal). Outras configuraes, como por exemplo, a de plug-ins (vista nos prximos captulos) tambm podem ser herdadas. O marcador dependencyManagement somente utilizado para o caso de submdulos. Os submdulos podem especificar uma dependncia de qualquer um dos artefatos listados sem necessitar especificar um nmero de verso. Isto til para diminuir o impacto nos projetos caso alguma verso de um artefato seja alterado. Importante: A propriedade ${project.version} avaliada pelo Maven durante a execuo.

Eteg Tecnologia da Informao Ltda

51

Introduo ao Apache Maven

Criando uma Nova Biblioteca


Criando uma nova Biblioteca

Para ilustrar, ser criada uma nova biblioteca chamada CalculadoraEstatistica.

Para criar o projeto, os mesmos passos utilizados anteriormente sero utilizados.


mvn archetype:create -DgroupId=br.com.eteg \ -DartifactId=CalculadoraEstatistica mvn eclipse:eclipse

A biblioteca CalculadoraEstatistica
Esta biblioteca tem a mesma estrutura de projetos da CalculadoraFinanceira. A diferena bsica est nos nomes dos pacotes e nos mtodos disponveis nas classes:

Tambm foi criado um teste unitrio para a classe CalculadoraEstatistica.

Criando o projeto
O procedimento para criar o projeto idntico ao visto na seo Criando o Primeiro Projeto com Archetype: mvn archetype:create -DgroupId=br.com.eteg \ -DartifactId=CalculadoraEstatistica Se voc estiver utilizando o IDE Eclipse, ento gere o projeto com o comando: mvn eclipse:eclipse

52

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Criando o Projeto para o Site


Criando o Projeto para o Site

Para o site, podemos escolher um archetype mais especfico:


mvn archetype:create -DgroupId=br.com.eteg \ -DartifactId=AplicacaoTeste \ -DarchetypeArtifactId=maven-archetype-webapp

Para que o Maven gere um projeto compatvel com o WTP do Eclipse, necessrio alterar o pom.xml gerado.

Para o site, podemos escolher um archetype mais especfico. mvn archetype:create -DgroupId=br.com.eteg \ -DartifactId=AplicacaoTeste \ -DarchetypeArtifactId=maven-archetype-webapp Desta vez, para integrar o projeto ao Eclipse, precisamos antes configurar a integrao com o Web Toolkit Project (WTP) do Eclipse, assim poderemos explorar todas as funcionalidades disponveis no IDE. O arquivo pom.xml gerado mostrado a seguir, j com as alteraes para suportar mltiplos projetos e com as dependncias. A parte em negrito necessria para a integrao com o o WTP: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <parent> <groupId>br.com.eteg</groupId> <artifactId>ProjetoCalculadora</artifactId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>br.com.eteg</groupId> <artifactId>AplicacaoTeste</artifactId> <packaging>war</packaging> <name>AplicacaoTeste Maven Webapp</name>

Eteg Tecnologia da Informao Ltda

53

Introduo ao Apache Maven


<dependencies> <dependency> <groupId>br.com.eteg</groupId> <artifactId>CalculadoraFinanceira</artifactId> </dependency> <dependency> <groupId>br.com.eteg</groupId> <artifactId>CalculadoraEstatistica</artifactId> </dependency> <dependency> <groupId>commons-validator</groupId> <artifactId>commons-validator</artifactId> <version>1.3.1</version> </dependency> </dependencies> <build> <finalName>AplicacaoTeste</finalName> <!-- add Eclipse WTP support --> <pluginManagement> <plugins> <plugin> <artifactId>maven-eclipse-plugin</artifactId> <configuration> <wtpversion>2.0</wtpversion> <wtpapplicationxml>true</wtpapplicationxml> <wtpmanifest>true</wtpmanifest> <downloadSources>true</downloadSources> <downloadJavadocs>true</downloadJavadocs> <projectNameTemplate> [artifactId]-[version] </projectNameTemplate> <manifest> ${basedir}/src/main/resources/META-INF/MANIFEST.MF </manifest> </configuration> </plugin> </plugins> </pluginManagement> </build> </project>

54

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven


Novamente, crie o projeto Eclipse com o comando: mvn eclipse:eclipse O projeto ficar com esta organizao:

O site contar com somente uma pgina JSP (index.jsp) e far uso da biblioteca Apache Commons Validator para converter e validar a entrada.

Eteg Tecnologia da Informao Ltda

55

Introduo ao Apache Maven

Herana entre POMs


Herana entre POMs

Os mdulos herdam as definies do projeto principal

Desta forma, vrios elementos, entre eles, version


e dependncias podero ser omitidos nos mdulos. No pom.xml de um mdulo, necessrio informar a coordenada do projeto principal.

Descendo um nvel, at o diretrio da CalculadoraFinanceira, o novo arquivo pom.xml modificado para o mdulo fica assim: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <parent> <groupId>br.com.eteg</groupId> <artifactId>ProjetoCalculadora</artifactId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>br.com.eteg</groupId> <artifactId>CalculadoraFinanceira</artifactId> <packaging>jar</packaging> <name>CalculadoraFinanceira</name> </project> Nota: O projeto CalculadoraEstatistica tem seu POM com a mesma estrutura do projeto CalculadoraFinanceira. O elemento parent especifica a relao do mdulo com o POM do projeto principal. Como podemos ver, ao herdar de outro POM, o arquivo ficou bem mais simples. Pudemos eliminar vrios elementos, entre eles o elemento version e o elemento dependencies.

56

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven


Dica: Voc pode especificar o caminho do arquivo pom.xml caso o layout do projeto no seja idntico ao padro seguido pelo Maven e apresentado anteriormente. Para isto, utilize o elemento relativePath dentro do elemento parent. Por exemplo: <relativePath>../parent/pom.xml</relativePath>

Eteg Tecnologia da Informao Ltda

57

Introduo ao Apache Maven

Empacotando o Projeto
Empacotando o Projeto

Se as bibliotecas no tiverem sido instaladas, ao tentar empacotar a aplicao, ser gerado um erro. Instale as bibliotecas com o comando: mvn install Para empacotar a aplicao, no diretrio onde est o pom.xml do projeto principal, digite: mvn package possvel executar a aplicao com o plugin para o Jetty:
mvn org.mortbay.jetty:maven-jetty-plugin:run

Finalmente, para empacotar o projeto como um todo, podemos ir at o diretrio onde est o arquivo pom.xml principal e executar o comando: mvn package Para cada submdulo que compe o projeto, o Maven ir passar pelo ciclo de vida de construo e ao final, teremos uma aplicao pronta para ser instalada. Importante: Se tentarmos construir a aplicao web ela ir falhar at que as bibliotecas CalculadoraFinanceira e CalculadoraEstatistica tenham sido instaladas no repositrio local. Em cada projeto, execute o comando mvn install. No diretrio target do projeto AplicacaoTeste voc poder encontrar um arquivo WAR pronto para ser instalado em um servidor.

Executando a Aplicao
Para executar uma aplicao web, necessrio ter um servidor compatvel com a especificao Servlet 2.4/JSP 2.0. Felizmente, existe um servidor leve, gratuito e que integrado ao Maven atravs de um plug-in. Este servidor o Jetty. Para executar a aplicao, v at o diretrio AplicacaoTeste e execute o comando: mvn org.mortbay.jetty:maven-jetty-plugin:run Em seguida, basta navegar para http://localhost:8080/AplicacaoTeste/.

58

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Reviso e Laboratrio
Reviso e Laboratrio

1- Qual deve ser o valor do elemento packaging para o projeto principal quando trabalhamos com mltiplos projetos no Maven? 2- Se todos os submdulos de um sistema necessitam de um mesmo artefato, como podemos declarar a dependncia a ele? 3- Como podemos criar rapidamente um projeto web com o Maven?

Eteg Tecnologia da Informao Ltda

59

Introduo ao Apache Maven

Captulo 4: Configuraes de Plug-ins e Relatrios

60

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Introduo
Introduo

O Maven enfatiza a conveno sobre a configurao

Mas nem sempre possvel usar as opes default

Veremos como configurar alguns plug-ins associados a importantes fases do ciclo de vida
Toda a configurao ser feita no arquivo pom.xml Veremos como utilizar propriedades

Tambm veremos como gerar relatrios e o site para o projeto com o Maven

Neste captulo veremos como alterar os padres de configurao para alguns plug-ins dos ciclos de vida de construo do projeto. Toda a alterao ser feita atravs do arquivo pom.xml do projeto principal (apesar de que tambm podemos fazer nos arquivos pom.xml dos submdulos). Basicamente, as configuraes para os plug-ins so informadas por meio da adio de um ou mais elementos plugin com sub-elementos configuration no arquivo pom.xml: <project> <!Partes omitidas --> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.5</source> <target>1.5</target> <optimize>true</optimize> </configuration> </plugin> </plugins> </build> <!Partes omitidas --> <project>

Eteg Tecnologia da Informao Ltda

61

Introduo ao Apache Maven


Tambm configuraremos a gerao de relatrios do Maven e veremos como criar um site para o projeto.

62

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Configurando a Fase de Compilao


Configurando a Fase de Compilao

O compilador Java pode ser configurado por meio de vrios parmetros Podemos determinar a compatibilidade de cdigo-fonte e do cdigo compilado

Por exemplo, generics requer cdigo-fonte e


compilado compatveis com a verso 1.5

Podemos configurar opes que afetam o desempenho

Opes debug e optimize

A compilao uma das mais importantes fases do ciclo de construo. Para que esta fase possa ser utilizada, muitas vezes precisamos configurar alguns parmetros que sero informados ao compilador. O compilador Java pode utilizar opes para a verso de compatibilidade tanto para o cdigo-fonte quanto para o cdigo compilado. Isto significa que para o cdigo-fonte, algumas funcionalidades no estaro disponveis para verses mais antigas. Por exemplo, generics foi uma funcionalidade introduzida na verso 5.0 do Java e no est disponvel nas verses anteriores. Para o cdigo compilado, importante certificar que voc est utilizando a mesma verso da mquina virtual que executar a aplicao, pois do contrrio, aparecer uma exceo como esta: java.lang.UnsupportedClassVersionError: Bad version number in .class file Para confirmar o plug-in compile, altere o POM, informando os parmetros: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.5</source> <target>1.5</target> <optimize>true</optimize> <debug>false</debug> </configuration> </plugin>

Eteg Tecnologia da Informao Ltda

63

Introduo ao Apache Maven


A opo optimize instrui o compilador a otimizar o cdigo, enquanto a opo debug instrui a adicionar informaes para depurao. Quando voc for gerar uma verso para produo, uma boa escolha otimizar e remover as informaes de depurao. Importante: Por default o compilador ser executado com source igual a 1.3 e target igual a 1.1.

64

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Configurando o Empacotamento da Aplicao


Configurando o Empacotamento da Aplicao

Podemos empacotar a aplicao de vrias formas em Java:

Bibliotecas e aplicaes so empacotadas em

arquivos com extenso JAR Aplicaes web so empacotadas em arquivos com extenso WAR Aplicaes que empacotam bibliotecas, vrias aplicaes web e componentes EJB utilizam arquivos com extenso EAR Todos os arquivos de empacotamento so compatveis com o formato ZIP

Neste curso vimos o empacotamento de dois tipos de artefatos: bibliotecas JAR e arquivos web WAR. Algumas configuraes teis podem ser feitas para os plug-ins de empacotamento:

Bibliotecas JAR
Existem vrias opes que podem ser utilizadas com esta forma de empacotamento. Criando um JAR executvel: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> ... <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <mainClass>br.com.eteg.Main</mainClass> </manifest> </archive> </configuration> ... </plugin> Voc informa a classe que a principal para o programa (possui um mtodo main()). Com isto, voc pode executar o programa digitando:

Eteg Tecnologia da Informao Ltda

65

Introduo ao Apache Maven


java jar arquivo.jar Ou ento, em um ambiente grfico (Windows, Gnome, KDE), clicar duas vezes sobre o arquivo.

Aplicaes web
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.0.2</version> <configuration> <warSourceExcludes>**/CVS</warSourceExcludes> <warSourceExcludes>**/.svn</warSourceExcludes> <archiveClasses>true</archiveClasses> </configuration> </plugin> Por default, todo o cdigo-fonte da aplicao web copiado. Para excluir alguma parte, voc pode utilizar o elemento warSourceExcludes. No exemplo, os dois asteriscos (**) significam recursivamente. Para **/CVS, significa que todos os diretrios CVS sero eliminados do empacotamento. A configurao archiveClasses indica que as classes Java para a aplicao (*.class) sero antes empacotadas em uma biblioteca JAR. O valor default false.

66

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Propriedades
Propriedades

So valores escritos em notao especial que podem ser utilizados para substituir parmetros de entrada para a configurao

So alteradas em um nico lugar, mas podem ser


utilizadas em vrios Facilitam a manuteno em caso de manuteno Um bom exemplo definir dependncias que seguem um mesmo nmero de verso em suas coordenadas

Propriedades no Maven so valores escritos em uma notao especial que podem ser utilizados para substituir parmetros de entrada para a configurao. As propriedades atuam como uma varivel que pode ser utilizada em vrios lugares, mas definida e alterada em um nico ponto. Claramente, a principal vantagem de se utilizar propriedades facilitar a manuteno quando ocorrem mudanas. Um bom exemplo so verses de artefatos. Para ilustrar, vamos considerar o Spring Framework, um famoso framework para desenvolvimento em Java. O Spring Framework bem modular e possui vrios artefatos, como podemos ver no fragmento de um arquivo pom.xml tpico: <!-- spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring-release-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-release-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring-release-version}</version> </dependency>

Eteg Tecnologia da Informao Ltda

67

Introduo ao Apache Maven


<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring-release-version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring-release-version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring-release-version}</version> <scope>runtime</scope> </dependency> Como podemos ver, ao invs de escrever o valor para a verso do Spring em cada artefato, foi utilizada uma propriedade chamada spring-release-version. A sintaxe para propriedades inici-las com $ e delimitar o nome entre chaves. Para definir uma propriedade no Maven, basta inclu-la debaixo do elemento properties: <project> <!-- Partes omitidas --> <properties> <spring-release-version>2.5.1</spring-release-version> </properties> <!-- Partes omitidas --> </project>

68

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Plug-in Report e Website do Projeto


Plug-in Report e Website do Projeto

A criao da infra-estrutura para gerar relatrios e um site de projeto pode demandar grande esforo

O Maven j traz consigo vrios recursos para simplificar esta tarefa Para criar um site rapidamente, utilize a fase site:

mvn site

Mas gerar os relatrios e o site sem um propsito claro no faz sentido algum

Para incluir relatrios ao projeto, edite o arquivo pom.xml

Adicione o elemento reporting Configure as opes de gerao de relatrios

Os relatrios e o site podem ser gerados em portugus (ou outro idioma)


Informe a opo locales para o o plug-in

A criao da infra-estrutura para gerar relatrios e o site para um projeto pode demandar grande esforo que quase sempre repetitivo. Por isto o Maven configurado para executar os relatrios do projeto por padro. No necessrio alterar nada para j se ter uma verso dos relatrios. Os relatrios recebero um conjunto de estilos (CSS) e faro parte do site da documentao do projeto. Basta executar: mvn site

Figura 10: Exemplo de site gerado pelo Maven

Entretanto, fique atento aos comentrios feitos por Tim OBrien em seu blog. Ele critica o simples fato de se usar o Maven para gerar relatrios que no realmente utilizados. O blog est disponvel em:
http://www.oreillynet.com/onjava/blog/2006/03/maven_project_info_reports_con.html

Nota: O plug-in Report tem vrias opes de configurao. Muitas delas no sero abordadas no curso por serem avanadas. Para a lista completa de metas do plug-in, consulte:

Eteg Tecnologia da Informao Ltda

69

Introduo ao Apache Maven


http://maven.apache.org/plugins/maven-project-info-reports-plugin/index.html

Adicionando Relatrios ao Projeto


Para adicionar um relatrio ao projeto, necessrio adicionar o plug-in ao elemento reporting do POM. Os relatrios que sero gerados devem ser informados debaixo do elemento reports: <project> ... <reporting> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> <reportSets> <reportSet> <reports> <report>dependencies</report> <report>project-team</report> <report>mailing-list</report> <report>cim</report> <report>issue-tracking</report> <report>license</report> <report>scm</report> </reports> </reportSet> </reportSets> <version>2.0.8</version> </plugin> </plugins> </reporting> ... </project> Para visualizar a documentao, voc poder utilizar a meta: mvn site:run Nota: Para multiprojetos, os links somente ficaro corretos quando voc executar a fase site-deploy (vista ainda neste captulo).

Configurando o suporte ao idioma portugus do Brasil


Para configurar o suporte ao nosso idioma, informe o elemento locales: <project> ...

70

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven


... <reporting> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-site-plugin</artifactId> <configuration> <locales>pt_BR</locales> </configuration> </plugin> ... </plugins> <reporting> ... </project>

Eteg Tecnologia da Informao Ltda

71

Introduo ao Apache Maven

Utilizando o Plug-in Report


Utilizando o Plug-in Report

Integrao com controle de verso Listas de discusso para o projeto Licena para o projeto Equipe do projeto

Controle de Verso
O plug-in Report tem uma meta chamada project-info-reports:scm que gera o relatrio com informaes sobre o controle de verso do projeto. Para configur-lo, necessrio alterar o POM do projeto: <project> ... <scm> <connection> scm:svn:http://eteg.net/svn/curso/trunk/site </connection> <developerConnection> scm:svn:https://eteg.net/svn/curso/trunk/site </developerConnection> <url>http://eteg.net/viewvc/curso/trunk/site</url> </scm> ... <reporting> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-project-info-reports-plugin</artifactId> <configuration> <webAccessUrl> http://eteg.net/viewvc/curso/trunk

72

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven


</webAccessUrl> <anonymousConnection> scm:svn:http://eteg.net/svn/curso/trunk </anonymousConnection> <developerConnection> scm:svn:https://eteg.net/svn/curso/trunk </developerConnection> </configuration> </plugin> ... </plugins> <reporting> ... </project> Consulte o administrador da rede ou o gerente de configurao de seu projeto para saber quais so os valores vlidos para as configuraes acima.

Listas de Discusso
Permite configurar o relatrio sobre as listas de discusso para o projeto. Exemplo: <project> ... <mailingLists> <mailingList> <name>Lista de usurios</name> <subscribe>subscribe-curso@eteg.net</subscribe> <unsubscribe>unsubscribe-curso@eteg.net</unsubscribe> </mailingList> </mailingLists> ... </project>

Licena para o projeto


Permite configurar a licena a ser usada. Se for especificada uma URL, ela ser automaticamente includa ao contedo: <project> ... <licenses> <license> <name>GNU Lesser General Public License</name>

Eteg Tecnologia da Informao Ltda

73

Introduo ao Apache Maven


<url>http://www.gnu.org/copyleft/lesser.html</url> <comments> Mais detalhes em http://hibernate.org/356.html. </comments> <distribution>repo</distribution> </license> </licenses> ... </project>

Equipe do Projeto
Para detalhar a equipe do projeto, existem duas opes: detalh-los como desenvolvedores que fazem parte da equipe principal ou como colaboradores. Por exemplo: <project> ... <developers> <developer> <id>bart</id> <name>Bart Simpson</name> <email>bart at simpsons.com</email> <organization>20th Century Fox</organization> <roles> <role>Desenvolvedor</role> </roles> </developer> </developers> <contributors> <contributor> <name>Fred Flintstone</name> <email>fred at stoneage.org</email> <organization>Bedrock</organization> <roles> <role>Escritor tcnico</role> </roles> </contributor> </contributors> ... </project>

74

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Utilizando outros Plug-ins para Relatrios


Utilizando Outros Plug-ins para Relatrios

Resultado de testes unitrios Anlise de cdigo

Utiliza a ferramenta de anlise de cdigo PMD Pode encontrar desde problemas simples, como

variveis que so declaradas e no utilizadas at problemas mais complexos como cdigo duplicado

Resultados de testes unitrios


Para gerar o relatrio com o resultado da execuo dos testes unitrios, configure o plug-in Surefire: <project> ... <reporting> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-report-plugin</artifactId> </plugin> </plugins> </reporting> ... </project>

Anlise de cdigo
Uma excelente ferramenta de anlise de cdigo o PMD (http://pmd.sf.net). Para gerar relatrios com esta ferramenta atravs do Maven, configure o plug-in: <project> ... <reporting> <plugins>

Eteg Tecnologia da Informao Ltda

75

Introduo ao Apache Maven


<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-pmd-plugin</artifactId> <version>2.3</version> <configuration> <linkXref>true</linkXref> <targetJdk>1.5</targetJdk> </configuration> </plugin> </plugins> </reporting> ... </project>

76

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Relatrios JavaDoc e JXR


Relatrios Javadoc e JXR

O plug-in Javadoc permite gerar a documentao a partir do cdigo-fonte Java do projeto. O plug-in JXR permite criar uma referncia cruzada entre as classes Java, transformando o cdigo-fonte em um conjunto de pginas HTML que podem ser navegadas

Por exemplo, so criados links entre as classes

O plug-in JavaDoc permite gerar a documentao do projeto neste formato (apenas classes Java so suportadas). Para configur-lo, adicione o relatrio ao POM: <project> ... <reporting> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> </plugin> </plugins> ... </reporting> ... </project>

O plug-in JXR
Este plug-in produz a referncia cruzada do cdigo-fonte do projeto. Por meio do relatrio gerado fica fcil navegar pelo cdigo. Para utiliz-lo, configure o POM como neste exemplo: <project> ... <build> ...

Eteg Tecnologia da Informao Ltda

77

Introduo ao Apache Maven


</build> <reporting> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jxr-plugin</artifactId> </plugin> </plugins> </reporting> ... </project> Nota: Vrios outros relatrios podem ser gerados e tambm possvel adicionar contedo ao site, mas estes tpicos fogem do escopo deste curso. Para maiores informaes, consulte o site do Maven.

78

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Disponibilizando o Website
Disponibilizando o Website

Para implantar o site gerado pelo Maven, primeiramente voc deve ter um destino configurado no arquivo pom.xml:

<project> ... <distributionManagement> <site> <id>website</id> <url>scp://empresa.com.br/site/docs/project/</url> </site> </distributionManagement> ... </project>

Em seguida, execute a fase site-deploy Dependendo da configurao, ser solicitado o login e a senha de conexo

Para implantar o site gerado pelo Maven, primeiramente voc deve ter um local configurado no arquivo pom.xml: <project> ... <distributionManagement> <site> <id>website</id> <url>scp://www.empresa.com.br/site/docs/project/</url> </site> </distributionManagement> ... </project> O elemento <id> identifica o repositrio configurado no arquivo settings.xml usando o elemento <servers>. A informao sobre a autenticao deve estar configurada. O elemento <url> configura o servidor onde ser feita a disponibilizao do site. Atualmente, somente cpia por SCP, RSync e cpia local so suportadas. Para disponibilizar o site, utilize a fase site-deploy do ciclo de vida: mvn site-deploy

Eteg Tecnologia da Informao Ltda

79

Introduo ao Apache Maven

Reviso e Laboratrio
Reviso e Laboratrio

1- Suponha que voc queira utilizar no cdigo a palavra-chave assert de Java, mas ficou sabendo que ela s est disponvel nas verses iguais ou posteriores 1.4. Como voc pode configurar o Maven para compilar o cdigo-fonte? 2- Cite uma vantagem do uso de propriedades. 3- Qual plug-in deve ser configurado para que a documentao gerada pelo Maven fique em portugus? 4- Qual plug-in permite gerar uma referncia cruzada do cdigo Java?

80

Eteg Tecnologia da Informao Ltda

Introduo ao Apache Maven

Bibliografia
http://www.ibm.com/developerworks/java/library/j-maven/ https://www6.software.ibm.com/developerworks/education/j-mavenv2/section2.html http://java.sys-con.com/node/393300 http://www.kleineikenscheidt.de/stefan/archives/2006/01/comparison-table-ant-vsmaven.html http://www.javaworld.com/javaworld/jw-05-2006/jw-0529-maven.html http://www.javaworld.com/javaworld/jw-12-2005/jw-1205-maven.html http://maven.apache.org

Eteg Tecnologia da Informao Ltda

81

Você também pode gostar