Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila Introducao Maven PDF
Apostila Introducao Maven PDF
br
R. Sergipe, 472 Pilotis Funcionrios
CEP: 30.130-170 Belo Horizonte MG
Telefone: (31) 3889-0990
Curso Introduo
ao Apache Maven
Introduo ao Apache Maven
Este trabalho est licenciado sob uma Licena Creative Commons Atribuio-Uso No-Comercial-
Vedada 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
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
Captulo 1 Introduo
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.
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
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
Mecanismo de resoluo de dependncias
Permite identificar dependncias entre artefatos, inclusive
dependncias transitivas
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:
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.
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.
Em resumo, o Maven:
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.
<project>
<modelVersion>4.0.0</modelVersion>
<!-- POM Relationships -->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<parent>...</parent>
<dependencyManagement>...</dependencyManagement>
<dependencies>...</dependencies>
<modules>...</modules>
Repositrio Maven
Repositrios Maven
Podem ser locais ou remotos
O repositrio local sempre pesquisado
primeiro a procura de artefatos.
Geralmente, se encontra em C:\Documents and
Settings\USUARIO\.m2 ou ~/.m2.
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.
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.
Localizando artefatos
Baseando-se na informao de dependncia descrita no POM, o Maven tentar
resolver as dependncias na seguinte ordem:
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>
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:
...
<dependencies>
<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:
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.
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.
Para listar os mojos de um plug-in, basta digitar, mvn P plugin, como por exemplo:
mvn P jar
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 plug-
in 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
Reviso e Laboratrio
Reviso e Laboratrio
1- Cite algumas das funcionalidades do Maven que podem ser utilizadas para o
desenvolvimento de softwares.
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 1.4 ou posterior (para a execuo do Maven, mas voc pode compilar cdigo para as
verses 1.3 e anteriores)
Memria No h um mnimo, depende do processo de construo. Geralmente, 64Mb
Disco No h mnimo. Aproximadamente 100MB para repositrio local tpico.
Sistema O Maven foi testado no Windows XP, Fedora Core e Mac OS X. Teoricamente, funciona
operacional em qualquer sistema onde uma mquina virtual compatvel funcione.
Instalao
O primeiro passo fazer o download no site http://maven.apache.org.
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().
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>
mvn eclipse:eclipse
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();
}
}
}
R$ 1.627,45.
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:
No exemplo anterior, ser criado um projeto para uma aplicao web em Java.
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>
Adicionar <dependency>
dependncias <groupId>junit</groupId>
<artifactId>junit</artifactId>
Configurar <version>3.8.1</version>
plugins <scope>test</scope>
</dependency>
</dependencies>
<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>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<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).
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] -----------------------------------------------------------------
package br.com.eteg.calculadora.financeira;
import junit.framework.TestCase;
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...
-------------------------------------------------------
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)
[INFO] -----------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] -----------------------------------------------------------------
[INFO] There are test failures.
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] -----------------------------------------------------------------
mvn install
mvn package
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
mvn javadoc:jar
Dica: Nos prximos captulos veremos como integrar a gerao do Javadoc junto com
a documentao do site.
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 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
eclipse:eclipse Cria os arquivos de configurao do Eclipse
eclipse:clean 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.
Inclua um ou mais
<dependency>
<groupId>junit</groupId>
elementos dependency <artifactId>junit</artifactId>
possvel eliminar a <version>3.8.1</version >
<scope>test</scope >
transitividade </dependency>
<dependency>
Novos repositrios <groupId>log4j</groupId>
remotos podem ser <artifactId>log4j</artifactId>
<version>1.2.12</version >
includos na lista de <scope>compile</scope >
pesquisa </dependency>
</dependencies>
<!-- partes omitidas --> ...
</project>
<project>
<!-- partes omitidas -->
...
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version >
<scope>test</scope >
</ dependency>
<dependency>
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 -->
Reviso e Laboratrio
Reviso e Laboratrio
4- Por que ao executar a fase test, o Maven sempre executa a fase compile antes?
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:
pkg Business Process Model
web application
AplicacaoTeste
CalculadoraFinanceira CalculadoraEstatistica
we b a p pl i ca ti o n
AplicacaoTeste
CalculadoraFinanceira CalculadoraEstatistic a
Neste captulo vamos utilizar o Maven para construir todos esses projetos.
<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>
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.
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:
Criando o projeto
O procedimento para criar o projeto idntico ao visto na seo Criando o Primeiro
Projeto com Archetype:
Se voc estiver utilizando o IDE Eclipse, ento gere o projeto com o comando:
mvn eclipse:eclipse
<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>
<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>
mvn eclipse:eclipse
O site contar com somente uma pgina JSP (index.jsp) e far uso da biblioteca
Apache Commons Validator para converter e validar a entrada.
<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>
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 plug-
in para o Jetty:
mvn org.mortbay.jetty:maven-jetty-plugin:run
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.
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.
mvn org.mortbay.jetty:maven-jetty-plugin:run
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?
Captulo 4: Configuraes de
Plug-ins e Relatrios
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).
<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>
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:
<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>
Importante: Por default o compilador ser executado com source igual a 1.3 e target
igual a 1.1.
Bibliotecas JAR
Existem vrias opes que podem ser utilizadas com esta forma de empacotamento.
<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:
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.
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.
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.
<project>
<!-- Partes omitidas -->
<properties>
<spring-release-version>2.5.1</spring-release-version>
</properties>
<!-- Partes omitidas -->
</project>
mvn site
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:
<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>
mvn site:run
Nota: Para multiprojetos, os links somente ficaro corretos quando voc executar a
fase site-deploy (vista ainda neste captulo).
<project>
...
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
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>
<project>
...
<licenses>
<license>
<name>GNU Lesser General Public License</name>
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>
<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>
<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>
...
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.
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>
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>
mvn site-deploy
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?
3- Qual plug-in deve ser configurado para que a documentao gerada pelo Maven
fique em portugus?
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-vs-
maven.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