Maven
Introdução
O Apache Maven é uma ferramenta para gerenciamento de projetos Java. Importantes tarefas do Maven são:
-
Resolução de dependências
-
Geração relatórios de teste
-
Compilação e empacotamento
O Maven é projetado para trabalhar em rede: as dependências do projeto são baixadas de um repositório compartilhado e mantidas em cache na estação de trabalho. Um servidor opensource Maven bastante utilizado é o Nexus Repository.
Todo projeto Maven segue uma estrutura de pastas padrão e possui, no diretório raiz, o arquivo
pom.xml
(Project Object Model), que descreve toda a configuração necessária para a ferramenta.
pom.xml
src/
main/
java/
resources/
test/
java/
resources/
target/
A pasta
java
contém o código-fonte.A pasta
resources
contém arquivos de configuração da aplicação.No
target
ficam os arquivos compilados. A pastatest
contém a programação relativa a automação de teste.
O Maven não atua durante o runtime da aplicação. Ou seja, ele não se torna uma dependência Java do projeto.
Maven Wrapper
O Maven pode ser instalado na estação de trabalho, com seu binário no path do sistema operacional.
Nesse caso, o comando mvn
estará disponível. Também é possível incluir o Maven dentro
do repositório Git do projeto, versão esta chamada de Maven Wrapper, sendo a abordagem recomendada,
vez que a versão do Maven é controlada por projeto. Neste caso, o comando mvnw
estará disponível.
Utilizando o Maven
As instruções do Maven são chamadas de Fases (phases) e organizadas em três grupos chamados de Ciclo de Vida (lifecycle). As principais fases são:
-
Ciclo de Vida Clean:
- Fase:
clean
, limpa o projeto (remoção da pastatarget
)
- Fase:
-
Ciclo de Vida Default:
-
Fase:
compile
, compila o código -
Fase:
test
, testa o código e gera relatórios -
Fase:
package
, empacota o projeto (jar, war ou ear) -
Fase:
install
, salva o pacote no repositório local para uso em outros projetos Maven -
Fase:
deploy
, publica o pacote no repositório remoto para uso em outros projetos Maven
-
-
Ciclo de Vida Site:
- Fase:
site
, gera website Maven do projeto
- Fase:
Para executar uma tarefa no Maven, informamos a fase desejada. O Maven executará todas as fases
que precedem a fase desejada relativas ao mesmo ciclo de vida. No exemplo abaixo, o Maven
faz a compilação, executa os casos de teste e gera o pacote, pois ao invocar package
são
executadas as fases compile
, test
e package
.
./mvnw package
Pode-se executar duas tarefas em sequência:
./mvnw clean package
O Maven é composto de plugins, cada qual contendo seus próprios comandos, os chamados Goals.
No exemplo abaixo, é invocado o goal resolve
do plugin dependency
.
./mvnw dependency:resolve # Apenas baixa as dependências do projeto
Alguns plugins se acoplam a fases de ciclo de vida e são executados automaticamente quando a fase é executada.
O Maven possui parâmetros especiais, chamados de “Maven CLI Options”. Um caso comum é:
./mvnw -U dependency:resolve # Força download de bibliotecas que mudaram no repositório remoto
Alguns parâmetros, iniciados com -D
, são tratados pelos plugins. Um caso comum é:
./mvnw -DskipTests package # Pula a fase de testes
Referências
-
Apache Maven Guides (EN)
https://maven.apache.org/guides/index.html -
Apache Maven Core Plugins (EN)
https://maven.apache.org/guides/index.html -
Maven: The Complete Reference, by Sonatype (EN)
https://books.sonatype.com/mvnref-book/reference/index.html