Download - Introdução ao maven
É 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