Ferramentas

Maven

Gerenciamento e compreensão de projetos de software.

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.

img

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

img

Este é o resultado esperado

img

Agora todo o código fonte existente nos arquivos .java deverão existir no diretório src/main/java

img

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.

  1. 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.
  2. Compile: Ele compila o código-fonte, converte os arquivos .java em .class e armazena as classes na pasta target/classes.
  3. Test: Ele executa testes de unidade para o projeto.
  4. Package: Esta etapa empacota o código compilado em um formato distribuível como JAR ou WAR.
  5. Integration test: Ele executa os testes de integração para o projeto.
  6. Verify: Esta etapa executa verificações para verificar se o projeto é válido e atende aos padrões de qualidade.
  7. Install: Esta etapa instala o código empacotado no repositório Maven local.
  8. 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.
🔔 Atenção
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:

  1. Acesse o site: Maven Repositoy
  2. Digite no campo de pesquisa o nome da dependência necessária: postgresql
  3. Clique na versão desejada e copie o conteúdo para ser inserido em seu pom.xml.

IMG

IMG

  1. Verifique se em seu pom.xml existe a tag de <dependencies> </dependencies>
  2. 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>
  1. Veja o resultado ao atualizar as dependências de seu projeto.

IMG

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.

ℹ️ Informaçã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
🏆 Sucesso
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.

  1. Primeiro, realize o download do Maven pelo site: Maven Download
  2. Descompacte o arquivo apache-maven-x.x.x-bin.zip em sua pasta de sua preferência.
  3. Configure as variáveis de ambiente de acordo com as recomendações de seu sistema operacional.

WindowsIMG

IMG

Agora é possível também realizar comandos Maven direto de seu sistema operacional

Referências