Você está na página 1de 23

GERENCIANDO

DEPENDNCIAS COM O
MAVEN

Rodolfo Rocha da Costa


Novembro 2015

INTRODUO

OMaven uma ferramenta de gerenciamento,


construo e implantao de projetos muito
interessante, que te ajuda no processo de
gerenciamento de dependncias e no de build,
gerao de relatrios e de documentao

INTRODUO

Caractersticas
o Sistema de dependncia;
o Construes Multi-Mdulo;
o Estrutura do projeto consistente;
o Modelo de construo consistente;
o Orientado a Plugin;

INTRODUO

Project Object Model


A

unidade bsica de configurao do Maven um


arquivo pom.xml, que deve ficar na raiz do seu
projeto. Ele fornece todas as configuraes para um
nico projeto.
Projetos maiores poderiam ser divididos em vrios
mdulos, ou subprojetos, cada um com seu prprio
POM. Um POM tambm pode herdar configurao de
outros POMs.
Todos os POMs herdam do Super POM por padro.

INTRODUO - POM

INTRODUO

O menor arquivo pom.xmlvlido o seguinte:


<project>
<modelVersion>4.0.0</modelVersion>
<groupId>br.com.caelum</groupId>
<artifactId>teste</artifactId>
<version>1.0</version>
</project>

INTRODUO
Artefato (artifact) - Um artefato geralmente um arquivo
JAR que fica no repositrio do Maven, mas pode ser de outro
tipo.
Cada artefato identificado atravs dos seguintes elementos:

modelVersion, a identificao da verso do arquivo pom.xml e


deve ser sempre 4.0.0. A identificao do projeto consiste em
trs informaes:
groupId: um identificador da empresa/grupo ao qual o projeto
pertence. Geralmente o nome do site da empresa/grupo ao
contrrio. Ex:br.com.ADS.
artifactId: o nome do projeto. Ex:teste.
version: a verso atual do projeto. Ex:1.0-SNAPSHOT. Sempre
ser executado o ciclo de vida do maven.
Type: jar, war, ear, pom (projeto de configurao).

INTRODUO

Repositrio local

um diretrio em seu PC onde os artefatos so


armazenados aps baixados de um repositrio remoto na
internet ou na intranet.

Repositrio remoto

Consiste numa aplicao que disponibiliza artefatos do


Maven. Pode se um repositrio pblico na Internet, onde
criadores de bibliotecas e frameworks disponibilizam seus
artefatos, ou pode ser um repositrio privado da empresa,
disponvel na intranet.
Quando adicionamos esses repositrios remotos em nossa
instalao do Maven, ele capaz de localizar e baixar
automaticamente as dependncias atravs da identificao
do artefato.

INTRODUO

Herana de projeto
Arquivos POM podem herdar configurao atravs do n <parent>, podendo herdar:
artifactId, groupId, version.
Dependncias.
Configurao de plugins.

<?xml version="1.0" encoding="UTF-8"?>


<project>
<parent>
<artifactId>maven-training-parent</artifactId>
<groupId>org.lds.training</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven-training</artifactId>
<packaging>jar</packaging>
</project>

INTRODUO

Projetos multi-mdulo
Maven

est na primeira classe de suporte


multimdulo. Cada projeto Maven cria um artefato
primrio.
Um POM pai usado para grupo de mdulos.
<project>
...
<packaging>pom</packaging>
<modules>
<module>maven-training</module>
<module>maven-training-web</module>
</modules>
</project>

INTRODUO

Empacotamento

Construo de tipo identificado usando o elemento


packaging. Informa ao Maven como contruir o projeto.
Exemplo de tipos de packaging:

pom, jar, war;


Padro jar;

<?xml version="1.0" encoding="UTF-8"?>


<project>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven-training</artifactId>
<groupId>org.lds.training</groupId>
<version>1.0</version>
<packaging>jar</packaging>
</project>

INTRODUO

Dependncias

As dependncias de um projeto para o Maven so


os arquivos ou bibliotecas (arquivos jar) que ele
precisa em alguma das fases do seu ciclo de vida.
Existem as fases de preparao, compilao,
teste, empacotamento e instalao e as
dependncias esto intimamente ligadas a este
ciclo de vida.

INTRODUO
Dependncias

dependncia fica dentro de um n <dependency/>, que tem os


seguintes ns componentes:

Cada

groupId: o groupId do POM da dependncia;


artifactId: o artifactId do POM da dependncia;
version: a version do POM da dependncia;
scope: o escopo do ciclo de vida do projeto (opcional).

<project>

<dependencies>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>

INTRODUO
Dependncias
<scope>

pode assumir os seguintes valores:

compile: a dependncia fica disponvel durante todas as fases do


projeto, desde a compilao at a instalao do sistema (escopo
padro).
provided: a dependncia est disponvel para compilao, mas em
tempo de execuo ela deve ser disponibilizada pelo ambiente no qual
a aplicao est executando. Por exemplo, a API de Servlets.
runtime: o contrrio de provided, a dependncia no est
disponvel em tempo de compilao, mas enviada junto com o
projeto em tempo de execuo. Por exemplo, drivers JDBC
(bibliotecas que so carregadas dinamicamente).
test: a dependncia est disponvel apenas execuo dos testes do
sistema.
system: indica que a dependncia no estar disponvel no
repositrio do Maven e sua localizao deve ser fornecida dentro do
POM.

INTRODUO

Adicionando uma dependncia

ESTRUTURA PADRO DE UM
PROJETO MAVEN

ESTRUTURA PADRO DE UM
PROJETO MAVEN
src/main/java: aqui fica o cdigo-fonte do sistema ou biblioteca.
src/main/resources:
arquivos auxiliares do sistema, como
properties, XMLs e configuraes.
src/main/webapp: se for uma aplicao web, os arquivos JSP,
HTML, JavaScript CSS vo aqui, incuindo oweb.xml.
src/test/java: as classes com seus testes unitrios ficam aqui e so
executadas automaticamente com JUnit e TestNG. Outros
frameworks podem exigir configurao adicional.
src/test/resources: arquivos auxiliares usados nos testes. Voc pode
ter properties e configuraes alternativas, por exemplo.
pom.xml: o arquivo que concentra as informaes do seu projeto.
target: o diretrio onde fica tudo que gerado, isto , onde vo
parar os arquivos compilados pelo processo de build, JARs, WARs,
JavaDoc, etc.
Site: diretrio principal da documentao
Pom.xml: arquivo de configurao do projeto

ESTRUTURA PADRO DE UM
PROJETO MAVEN
Um ponto importante desta estrutura que ela
separa os arquivos da aplicao dos arquivos dos
testes da aplicao.
Assim quando se gera um JAR ou WAR do
sistema, os seus testes no vo junto, porque no
h necessidade de empacotar testes unitrios
junto com o sistema.

CICLO DE VIDA
Validate verifica se a sua configurao est correta;
Compile compila o cdigo fonte do projeto ;
Test executa os testes unitrios do projeto;
Package empacota o projeto conforme foi definido na
sua descrio;
Integration-test executa os testes de integrao;
Verify verifica a qualidade da aplicao e do cdigo
(normalmente com relatrios de anlise de cdigo,
resultados de testes de integrao e carga);
Install instala o artefato gerado no repositrio local
do Maven;
Deploy envia o artefato gerado para um servidor
remoto para que ela seja implantada;

CICLO DE VIDA
Quando voc manda o Maven executar qualquer
uma destas fases, ele automaticamente executa
todas as fases anteriores.
Se executamos a fase package ele
automaticamente executa as fases validate,
compile e test antes de finalmente executar
package.

PROCESSO DE INSTALAO

Download: http://maven.apache.org

Descompactar a ferramenta em um lugar fixo


Criar a varivel de ambiente M2_HOME apontando
para o diretrio de instalao
Atualizar a varivel de ambiente PATH apontando
para o diretrio M2_HOME/bin (;% M2_HOME% \ bin)

Propriedades do SistemaVariveis de
ambiente.
Testando:

mvn version
limpando: mvn clean

Repositorio local: .m2

REPOSITORIO MAVEN

http://mvnrepository.com

REPOSITORIO MAVEN

<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/xsd/maven4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>br.com.starcode</groupId>

<artifactId>teste-maven-01</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>Teste Maven 01</name>

<description>Um teste de projeto simples com o maven</description>

<dependencies>
<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.12</version>
</dependency>

</dependencies>
</project>

Você também pode gostar