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 pasta test 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:

  1. Ciclo de Vida Clean:

    1. Fase: clean, limpa o projeto (remoção da pasta target)
  2. Ciclo de Vida Default:

    1. Fase: compile, compila o código

    2. Fase: test, testa o código e gera relatórios

    3. Fase: package, empacota o projeto (jar, war ou ear)

    4. Fase: install, salva o pacote no repositório local para uso em outros projetos Maven

    5. Fase: deploy, publica o pacote no repositório remoto para uso em outros projetos Maven

  3. Ciclo de Vida Site:

    1. Fase: site, gera website Maven do projeto

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