Maven
Maven
Apache Maven é uma ferramenta de gerenciamento e compreensão de projetos de software.
O Maven é uma poderosa ferramenta de gerenciamento de projetos baseada no POM (modelo de objeto do projeto), usado para construção, dependência e documentação do projeto. É uma ferramenta que pode ser usada para construir e gerenciar qualquer projeto baseado em Java. O Maven facilita o trabalho diário dos desenvolvedores Java e ajuda na construção e execução de qualquer projeto baseado em Java.
Para quê serve ?
Mesmo tendo uma das principais funções como o gerenciamento de dependências, o maven também é capaz de auxiliar na compilação, build e deploy de nossos projetos desenvolvidos em Java.
Toda a configuração do projeto fica centralizada em um arquivo denominado de pom.xml
.
<!Estrutura simples do arquivo pom.xml>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.suaempresa.ou.seuprojeto</groupId>
<artifactId>projeto-maven</artifactId>
<version>1.0</version>
<name>projeto-maven</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<sua.propriedade> ... </sua.propriedade>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
...
</dependency>
</dependencies>
<build>
...
</build>
</project>
Configuração
É mais conveniente em um ambiente de desenvolvimento utilizar o Maven através de uma IDE como Eclipse, IntelliJ e VSCode para criar o novo projeto, o que precisamos considerar inicialmente são as propriedades de identificação deste novo projeto:
- groupId: O nome da organização ao qual pertence esse projeto, possui o mesmo padrão de nomenclatura de pacotes, por exemplo
com.digytal
- artifcatId: O nome do projeto em questão, exemplo
controle-financeiro-app
- version: A versão do nosso projeto, caso não seja colocado nenhum valor o Maven irá utilizar o valor padrão que é
1.0-SNAPSHOT
- package: O nome do pacote principal do nosso projeto, é boa pratica colocar a junção do groupId com o artifactId, no nosso caso ficará
com.digytal.controlefinanceiro
, caso não seja passado nenhum valor, o Maven irá assumir o mesmo valor colocado no groupId
Abaixo temos uma ilustração de um projeto Maven sendo criado pelo assistente da IDE IntelliJ
Este é o resultado esperado
Agora todo o código fonte existente nos arquivos .java deverão existir no diretório src/main/java
Ciclo de vida
Abaixo está uma representação do ciclo de vida ou Maven Lifecycle padrão do Maven e suas 8 etapas: validar, compilar, testar, empacotar, testar a integração, verificar, instalar e implantar.
- Validate: Esta etapa valida se a estrutura do projeto está correta. Por exemplo – Verifica se todas as dependências foram baixadas e estão disponíveis no repositório local.
- Compile: Ele compila o código-fonte, converte os arquivos .java em .class e armazena as classes na pasta target/classes.
- Test: Ele executa testes de unidade para o projeto.
- Package: Esta etapa empacota o código compilado em um formato distribuível como JAR ou WAR.
- Integration test: Ele executa os testes de integração para o projeto.
- Verify: Esta etapa executa verificações para verificar se o projeto é válido e atende aos padrões de qualidade.
- Install: Esta etapa instala o código empacotado no repositório Maven local.
- Deploy: Ele copia o código empacotado para o repositório remoto para compartilhá-lo com outros desenvolvedores.
Comandos
- mvn clean: Limpa o projeto e remove todos os arquivos gerados pela compilação anterior.
- mvn compile: Compila o código-fonte do projeto.
- mvn test-compile: Compila o código-fonte de teste.
- mvn test: Executa testes para o projeto.
- mvn package: Cria um arquivo JAR ou WAR para o projeto para convertê-lo em um formato distribuível.
- mvn install: Implementa o arquivo JAR/WAR empacotado no repositório local.
- mvn site: Gera a documentação do projeto.
- mvn validate: Valida o POM e a configuração do projeto.
- mvn idea:idea: Gera arquivos de projeto para IntelliJ IDEA ou Eclipse.
- mvn release:perform: Executa uma versão de compilação.
- mvn deploy: Copia o arquivo JAR/WAR empacotado para o repositório remoto após a compilação, execução de testes e construção do projeto.
- mvn archetype:generate: Este comando é utilizado para gerar um novo projeto a partir de um arquétipo, que é um template para um projeto. Esse comando normalmente é usado para criar novos projetos com base em um padrão ou estrutura específica.
- mvn dependency:tree: Este comando é usado para exibir as dependências do projeto em formato de árvore. Esse comando normalmente é usado para entender as dependências do projeto e solucionar quaisquer problemas.
Os comandos essenciais para um primeiro aprendizado são:
clean
, compile
, install
.Infraestrutura
Após compreendermos o ciclo de vida e os principais comandos do Maven, precisamos aprender o comportamento esperado na execução de cada comando correspondentemente.
Quando você inicia um projeto Maven utilizando alguma IDE como IntelliJ ou Eclipse por exemplo, no sistema operacional Windows, uma nova pasta denominada de .m2
será criada no diretório do usuário atual, exemplo: C:\Users\gleyson\.m2
.
A partir deste diretório, você conseguirá visualizar na sub-pasta repository
todas as dependências locais *.jar
utilizadas em nossos projetos estruturadas por pastas seguindo as diretrizes no pom.xml
.
<groupId>com.suaempresa.ou.seuprojeto</groupId>
<artifactId>projeto-maven</artifactId>
<version>1.0</version>
Dependências
Além de orquestrar maestosamente a estrutura e ciclo de validação, compilação e publicação de nossos projetos, o Maven também tem um papel extremamente relevante para qualquer aplicação, a gestão de dependências. Como você sabe, projetos Java necessitam de algumas dependências .jar para desfrutar de recursos já disponibilizados pela comunidade ou até mesmo projetos de grandes empresas.
Imagina que agora a sua aplicação precisa de um driver de conexão de banco de dados onde sua empresa escolheu a alternativa open source do PostgreSQL. Para adicionar esta ou qualquer dependência Maven basta você realizar o procedimento abaixo:
- Acesse o site: Maven Repositoy
- Digite no campo de pesquisa o nome da dependência necessária:
postgresql
- Clique na versão desejada e copie o conteúdo para ser inserido em seu
pom.xml
.
- Verifique se em seu
pom.xml
existe a tag de<dependencies> </dependencies>
- Dentre do elemento
<dependencies>
insira esta e outras dependências conforme código abaixo:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.6.0</version>
</dependency>
- Veja o resultado ao atualizar as dependências de seu projeto.
Hora da verdade
Vamos imaginar que precisaremos criar um projeto maven com as seguintes diretrizes: Um projeto de simples cadastro que precisará armazenar os dados no banco de dados PostgreSQL. Abaixo seguem diretrizes da empresa para determinar as características de nosso projeto.
- Nome da empresa: izatec
- Nome do projeto: iza-sys
- Versão do projeto: 1.0
- Finalidade do projeto: Comercial
- Dependências iniciais: PostgreSQL
Definição do pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.iza.tec</groupId>
<artifactId>iza-sys</artifactId>
<version>1.0</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.6.0</version>
</dependency>
</dependencies>
</project>
Comandos e comportamentos
Após nosso projeto criado, vamos agora executar alguns comandos que serão recorrentes na evolução da sua aplicação.
Para execução dos comandos, você poderá escolher por utilizar o terminal ou a interface gráfica da sua IDE.
Compilando o projeto e gerando/recriando a pasta target
em seu projeto
mvn compile
Gerando o arquivo iza-sys-1.0.jar
e copiando para a pasta .m2\repository\com\iza\tec\iza-sys\1.0
.
mvn install
Removendo a pasta target
de seu projeto
mvn clean
Quando estiver confiante para distribuir a sua aplicação para o mundo, habilite o serviço de repositório remoto como JFROG Artifactory e execute o comando
mvn deploy
.Sem IDE
Não é muito comum, mas possível executar os comandos Maven direto de nosso sistema operacional via algum terminal de comandos.
- Primeiro, realize o download do Maven pelo site: Maven Download
- Descompacte o arquivo
apache-maven-x.x.x-bin.zip
em sua pasta de sua preferência. - Configure as variáveis de ambiente de acordo com as recomendações de seu sistema operacional.
Windows
Agora é possível também realizar comandos Maven direto de seu sistema operacional
Referências