25
Prof. Anderson V. de Araújo

Introdução ao maven

Embed Size (px)

Citation preview

Prof. Anderson V. de Araújo

É uma ferramenta de construção, gerenciamento e compreensão de aplicações

Também do grupo apache Revolucionou o gerenciamento de

dependências em Java Não precisamos mais adicionar as bibliotecas

no controle de versão! Introduziu o conceito do repositório central

Maven

Dependency System Multi-module builds Consistent project structure Consistent build model Plugin oriented Project generated sites

1. Compilar o código-fonte2. Copiar os recursos3. Compilar e executar os testes4. Empacotar o projeto5. Distribuir (deploy) o projeto6. Limpar tudo

Diferentemente do ant, não tem tasks e targets Já existem tarefas pré-definidas, chamadas goals, que

são agrupadas por plugins Por exemplo, o plugin compiler possui goals: compile: compila o código fonte testCompile: compila os unit tests

Pode invocar goal por goal, ou então usar os phases Uma phase é composta por uma série de goals pré definidos Por exemplo, a fase de package (empacotar) é composta por

compilar, testar e gerar o jar Não precisamos escrever nada disso

Basta declararmos o que o projeto necessita, que o maven se encarrega do resto

A grande diferença entre o build.xml do Ant e o pom.xml do Maven é o paradigma.

No Ant usamos esse XML praticamente como uma linguagem de programação, onde você da comandos em relação ao build do projeto.

No Maven usamos o XML para definir a estrutura do projeto, e a partir dessas declarações o Maven possui targets bem definidos que usam essas informações para saber como realizar aquela tarefa.

Exemplo: para compilar com o Ant criamos um target que chama o javac, mas para compilar com o Maven usamos um target já existente (não o criamos), e ele vai usar a informação que define onde está o código fonte e para onde ele deve ser compilado (sendo que muitas dessas informações possuem convenções e defaults, e nem precisam ser configuradas)

Baixar a última versão em http://maven.apache.org

Adicionar a variável de sistema: M2_HOME, com valor: C:\Program Files\apache-maven-3.1.0 Adicionar %M2_HOME%/bin ao path do

windows como M2 Testar rodando mvn --version na linha

de comando

Vá no eclipse, help, install new software All available sites Selecione as opções: Maven Integration WTP Maven Integration for Eclipse

Caso não encontre, adicione o site: http://download.eclipse.org/technology/m2e/releases

É o Project Object Model Representado pelo arquivo pom.xml Ele descreve o projeto / aplicação: Nome e Versão Tipo do Artifact (jar, war, …) Endereço dos códigos-fontes Dependências Plugins Perfis (configurações de build específicas)

<project><modelVersion>4.0.0</modelVersion> <groupId>org.fatec.maven</groupId> <artifactId>myshop</artifactId> <version>1.0</version>

</project>

modelVersion: Versão do POM groupId: pacote da “empresa” artifactId: nome do artefato (war, jar, ...) version: Versão do artefato

Ao desenvolver um projeto, precisamos de bibliotecas externas e o maven para gerenciá-las!

Ele vai baixar, a partir do repositório central de artefatos: o POM de cada biblioteca externa configurada o jar de cada biblioteca e de suas dependências,

recursivamente (gerenciamento de bibliotecas transitivo) Milhares de artefatos estão cadastrados no repositório

central do maven http://www.mvnrepository.com/

Os jars baixados são armazenados na pasta repositorydentro de M2_HOME Se mais de um projeto depende do mesmo jar, ele não é

baixado de novo

compile: Uma dependência com escopo compile está disponível em todas as fases. É o valor padrão

provided: Quando a biblioteca deve ser usada para compilar aplicação mas não é distribuída. Usada quando o servidor de aplicações deverá prover o JAR

runtime: Biblioteca não é necessária para a compilação e sim para a execução (ex. JDBC drivers)

test: Somente usadas para compilar e executar testes (ex. JUnit)

<project>...<dependencies>

<dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>3.0</version><scope>provided</scope>

</dependency><dependency>

<groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>4.2.0.Final</version>

</dependency></dependencies>

</project>

Local: É uma pasta em sua máquina (.m2 em %USER_HOME% ) É criado quando qualquer comando maven for executado pela

primeira vez Central: Fornecido pela comunidade Maven Contém um grande número de bibliotecas comumente

utilizadas Quando Maven não encontra qualquer dependência no

repositório local, ele começa a procurar no repositório central Necessita da internet e não precisa ser configurado

Remoto Repositórios que podem ser adicionados ao POM quando as

bibliotecas não se encontram no repositório central

Uma phase é composta por uma série de goals pré definidos

Ao executar uma fase, todas as fases anteriores a ela são chamadas

Fazem parte do ciclo de build do Maven Para executar: mvn [phase-name]

Representa uma tarefa específica que contribui para a construção e gestão de um projeto

Pode estar vinculado a zero ou mais fases Um goal não vinculado a qualquer fase pode ser

executado fora do ciclo de vida por invocação direta

A ordem de execução depende da ordem na qual o(s) goal(s) e a(s) fase(s) são invocadas

Por exemplo, considere o comando: mvn clean dependency:copy-dependenciespackage

Os argumentos clean e package são fases de construção, enquanto dependency:copy-dependencies é um goal

É uma sequência de fases (phases) bem definidas que definem a ordem em que os goals devem ser executados

Aqui uma fase representa um estágio do ciclo de vida

validate: valida se o projeto está correto e todas as informações necessárias estão disponíveis

compile:compila o código fonte do projeto test: executa os testes unitários do código compilado, usando

uma ferramenta de testes unitários, como o junit package: empacota o código compilado de acordo com formato

escolhido (JAR, WAR, ...) integration-test: processa e faz o deploy do pacote em um

ambiente onde os testes de integração podem ser executados verify: executa checagens para verificar se o pacote é válido e

atende aos critérios de qualidade install: instala o pacote no repositório local, para ser usado como

dependência de outros projetos locais deploy: feito em ambiente de integração ou de release, copia o

pacote final para um repositório remoto para ser compartilhado entre desenvolvedores e projetos

O maven possui muitos plugins e goalsdiferentes já prontos http://maven.apache.org/plugins/

Fornece um conjunto de goals que podem ser executados: mvn [plugin-name]:[goal-name]

É possível adicionar outros plugins não existentes no POM

clean: Limpa o diretório target e o apaga depois do build

compiler: Compilar os códigos Java surefile: Executar testes JUnit e criar relatórios

de testes jar: Construir JAR war: Construir WAR javadoc: Gerar Javadoc antrun: Executar um conjunto de tasks do ant de

qualquer fase mencionada no build

É um conjunto de valores de configuração que podem ser usadas para definir ou substituir os valores padrão de uma construção do Maven Por exemplo, o caminho do servidor de banco de

dados no desenvolvimento, teste e ambientes de produção

Serve para personalizar a construção para diferentes ambientes Como produção, desenvolvimento, tests, stage, ...

São especificados no POM usando os elementos activeProfile e profile

São acionados de diferentes maneiras

Tipos: Project: Definido no POM do projeto User: Definido no settings do Maven

(%USER_HOME%/.m2/settings.xml) Global: Definido no settings global do Maven

(%M2_HOME%/conf/settings.xml) Ativação: Explicitamente usando o console Através de configurações do Maven Com base em variáveis de ambiente (variáveis usuário /

sistema) Configurações de SO (por exemplo, família Windows) Presente / faltando arquivos

É um plugin do Maven que cria um protótipo (template) de projeto do Maven

Usado na linha de comando: mvn archetype:create

Só definir o groupID, artifactID, version e o package referentes ao seu projeto

Depois disso você terá uma estrutura de projeto pronta para ser usada

Exemplo: maven-archetype-webapp: Gera um projeto

inicial para web

archetype:generate cria um projeto Maven a partir de um modelo,

guiando o usuário através de um wizard que fará as configurações necessárias

archetype:create-from-project cria um archetype a partir de um projeto existente.

archetype:crawl busca no repositório por archetypes e atualiza o

catálogo