O maven é uma tentativa de aplicar padrões a infraestrutura de construção de um projeto para melhorar a compreensão e produtividade do mesmo, fornecendo um caminho claro em busca de melhores práticas.
O maven, também é essencialmente uma ferramento de gestão e compreensão de projetos, ajudando em:
- Compilações
- Gerenciamento de dependências
- Testes
- Documentações
- Distribuição
- Lançamentos
Para instalar o maven, basta acessar o site oficial do maven, baixar a versão recente e seguir as instruções de instalação.
Para criar um projeto com o maven, temos um exemplo de comando que pode ser utilizado para criar um projeto com o maven básico.
mvn archetype:generate -DgroupId=com.estudosMaven -DartifactId=estudosMaven -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4
Realizando o comando a seguir, teremos a seguinte estrutura: IGNORE o .idea (é criado pela IDE).
mavenStudy
├── pom.xml
└── src
├── main
│ ├── java
│ │ └── com
│ │ └── estudosMaven
│ │ └── App.java
│ └── resources
└── test
├── java
│ └── com
│ └── estudosMaven
│ └── AppTest.java
└── resources
- mvn archetype:generate - comando para gerar um projeto maven.
- -DgroupId - define o nome do pacote do projeto, no no casso caso foi estudosMaven.
- -DartifactId - define o nome do projeto, no caso estudosMaven.
- -DarchetypeArtifactId - define o "esqueleto" de projeto que será criado, no caso maven-archetype-quickstart foi o utilizado.
- -DarchetypeVersion - define a versão do "esqueleto" de projeto que será criado, no caso 1.4 foi a versão utilizada.
- pom.xml - arquivo de configuração do maven, onde ficam as dependências, plugins, etc.
- main - pasta onde ficam os arquivos fontes do projeto.
- java - pasta onde ficam os arquivos fontes de testes do projeto.
O arquivo criado pom.xml, cuja abreviação significa Project Object Model, é considerado a unidade básica e central de trabalho em quem o maven irá se apoiar para construir o projeto, nele são colocadas informações sobre o projeto, como nome, versão, dependências, plugins, propriedades etc.
Ok, o projeto foi definido, com pastar, subpastas e seu executável, porém, como é seu funcionamento com o maven? A seguir, vou listar alguns comandos que são utilizados no maven.
- MVN COMPILE - Compila a nossa aplicação, baixando as dependências necessárias declaradas no pom.xml, o que acabará como resultado na criação do diretório target, responsável por armazenar os arquivos compilados.
- MVN TEST COMPILE - Realiza o mesmo processo que o anterior, porém, para os arquivos de testes.
- MVN PACKAGE - Empacota o projeto, gerando um arquivo .jar, .war, .ear, etc dependendo do que foi específicado, este arquivo será gerado no diretório target com nome, versão, e SNAPSHOT (o que significa que não é a versão estável ou definitiva).
- MVN INSTALL - Instala o projeto no repositório local, que é por padrão maven o .m2/repository, para que possa ser utilizado em outros projetos.
- MVN DEPLOY - Faz o deploy do projeto no repositório remoto, como o git, bitbucket, etc.
O maven possui 3 ciclos de vida, que são compostos por fases que são executadas em sequência, são eles:
O ciclo de vida default é o ciclo de vida padrão do maven, possuindo um padrão de construção e distribuição de projeto bem definido. As fases do ciclo de vida default são, em um exemplo padrão (há outros tipos de fases para o ciclo de vida default):
- VALIDATE - Verifica 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 - Testa o código compilado, usando um framework de teste como JUnit.
- PACKAGE - Pega o código compilado e o empacota em um formato como JAR, WAR ou EAR.
- VERIFY - Executa qualquer verificação necessária no pacote para garantia com seus testes de integração e que ele é válido para ser publicado.
- INSTALL - Instala o pacote no repositório local, para que possa ser usado como uma dependência em outros projetos localmente.
- DEPLOY - Faz o deploy do pacote no repositório remoto, para que possa ser usado como uma dependência em outros projetos remotamente.
IMPORTANTE - Caso seja utilizado por exemplo, o comando mvn install, o maven irá executar todas as fases do ciclo de vida default até o install, o mesmo vale para todos os outros comandos, por isso este é o motivo dele ser o mais utilizado. Todas essas fases podem ser utilizadas separadamente no terminal do maven, por exemplo, mvn validate, irá executar apenas a fase validate do ciclo de vida default, porém se usarmos o comando mvn compile, ele irá executar o validate e o compile.
O ciclo de vida clean é o ciclo de vida responsável por limpar os arquivos gerados pelo maven, como por exemplo, os arquivos compilados, os arquivos empacotados entre outros.
Cabe destacar que o ciclo de vida tem como objetivo principal a limpeza dos arquivos gerados pelo maven, porém, ele não limpa os arquivos gerados pelo projeto.
Possui somente 3 fases: pre-clean, clean e post-clean. Que basicamente estão relacionados diretamente com limpeza e não há necessidade de menção.
O ciclo de vida site é o ciclo de vida responsável por gerar o site do projeto, que é gerado no diretório target/site, em que podemos ver informações do projeto, como por exemplo, informações sobre as dependências, plugins, relatórios de testes, etc.
Essa informações são geradas em um arquivo chamado index.html, que é o arquivo principal do site do projeto.
Possui 4 fases que são: pre-site, site, post-site e site-deploy, que, pelo mesmo motivo anterior, não há necessidade de menção.
IMPORTANTE - O maven possui também a possibilidade de combinações de diversos tipos de ciclos de vida, como, por exemplo, o comando mvn clean install site, que irá realizar o ciclo de vida clean, depois o ciclo de vida default até a fase install, e por fim, o ciclo de vida site.
Como podemos ver, o maven é uma ferramenta muito poderosa e que pode nos ajudar muito no desenvolvimento de projetos. Por enquanto, não serão abordados temas como archetypes (outros esqueletos padrão), plugins e detalhadamente o POM.xml, porém, futuramente serão abordados.
Todas as informações aqui elencadas foram retiradas da documentação oficial do maven, que pode ser encontrada no link: