DEV Community

Cover image for Apache Maven: Um Guia Básico
Pedro Pietroluongo
Pedro Pietroluongo

Posted on • Edited on

Apache Maven: Um Guia Básico

TL;DR

O Apache Maven é uma ferramenta poderosa de gerenciamento de projeto para software, amplamente usada para a construção de projetos, dependência e documentação. Este artigo explora a história do Maven, sua utilidade, e a razão de sua criação bem como seu ciclo é funcionamento. Também inclui um exemplo de codificação de um plugin simples que recebe uma string e retorna o hash na tela.

O que é o Apache Maven?

O Apache Maven é uma ferramenta de gerenciamento de projetos de software, focada em automação e compreensão. Com base no conceito de um Modelo de Objeto de Projeto (POM), o Maven pode gerenciar a construção, os relatórios e a documentação de um projeto a partir de uma peça central de informação.

Por que o Maven foi criado?

O Maven nasceu da necessidade de simplificar o processo de construção de projetos no Jakarta Turbine. A maioria dos projetos tinha scripts de compilação Ant que eram quase idênticos, o que levou ao desenvolvimento de um conjunto de scripts comuns. Ao longo do tempo, a necessidade de um sistema de construção e gerenciamento de projetos mais abrangente tornou-se evidente, e assim nasceu o Maven.

A História do Maven

A primeira versão do Maven foi lançada em julho de 2004, como um projeto do Apache Software Foundation. Desde então, evoluiu significativamente, com a versão 2.0, lançada em outubro de 2005, introduzindo grandes mudanças na arquitetura para tratar de vários problemas estruturais com a versão 1.x. A versão 3.0, lançada em outubro de 2010, focou na usabilidade e na performance.

O Ciclo de vida do Maven

O Apache Maven organiza o processo de compilação em torno do conceito de ciclo de vida de compilação, que é uma sequência ordenada de fases. Cada fase representa um estágio no ciclo de vida, como compilação, teste, empacotamento, instalação, etc.

Uma "phase", ou fase, no Maven, é uma etapa no ciclo de vida de construção. Por exemplo, a fase compile compila o código-fonte do projeto, a fase test testa o código-fonte compilado usando um framework de teste adequado, a fase package leva o código compilado e o empacota em um formato distribuível (como JAR, WAR, etc.).

Aqui estão algumas das fases padrão no ciclo de vida de construção padrão do Maven:

  • validate: verifica se todas as informações necessárias estão disponíveis para o projeto. compile: compila o código-fonte do projeto.
  • test: testa o código-fonte compilado usando um framework de teste adequado.
  • package: leva o código compilado e o empacota em um formato distribuível (como JAR, WAR, etc.).
  • verify: executa verificações para garantir que o pacote é válido e atende a critérios de qualidade.
  • install: instala o pacote no repositório local para uso como dependência em outros projetos locais.
  • deploy: copia o pacote final para o repositório remoto para compartilhamento com outros desenvolvedores e projetos.

As "goals", ou metas, são as tarefas executadas por plugins. Cada plugin pode ter um ou mais objetivos, e cada objetivo é responsável por uma tarefa específica. Por exemplo, o plugin compiler tem objetivos compile e testCompile para compilar o código-fonte e o código de teste, respectivamente.

A relação entre fases e metas é que quando uma fase é chamada via linha de comando (por exemplo, mvn install), todas as metas vinculadas a essa fase são executadas na ordem.

Por que o Maven é importante no desenvolvimento de software?

O Maven simplifica e padroniza o processo de construção de um projeto. Ele cuida de tarefas como compilação, distribuição, documentação, colaboração de equipe e outras tarefas de gerenciamento de projetos.

O Maven gerencia as dependências e verifica a compatibilidade entre diferentes versões de uma biblioteca, reduzindo o risco de conflitos de versão. Ele também suporta a integração com ferramentas de controle de versão como Git e SVN, facilitando o gerenciamento do código fonte.

Codificando um Plugin Simples

Aqui está um exemplo de como codificar um plugin simples que recebe uma string e retorna o hash na tela. Este plugin usará o algoritmo SHA-256 para criar o hash.

package com.example;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import java.security.MessageDigest;

/**
 * @goal displayhash
 */
@Mojo(name = "hash-plugin")
public class HashMojo extends AbstractMojo
{
    /**
     * @parameter property="msg"
     * @required
     */ 
    @Parameter(property = "hash-plugin.msg", defaultValue = "Olá Mundo!" )
    private String msg;

   @Parameter( 
      property = "parametro.encoding", 
      defaultValue = "UTF-8" )
   private String enconding;


    public void execute() throws MojoExecutionException
    {
        try {
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            byte[] hash = digest.digest(msg.getBytes(enconding));
            getLog().info(bytesToHex(hash));
        } catch(Exception ex) {
            throw new MojoExecutionException("Error creating hash", ex);
        }
    }

    private static String bytesToHex(byte[] bytes) {
        StringBuffer result = new StringBuffer();
        for (byte b : bytes) {
            result.append(String.format("%02x", b));
        }
        return result.toString();
    }
}

Enter fullscreen mode Exit fullscreen mode

Para usar este plugin, você precisa adicionar ao seu arquivo pom.xml:

<build>
  <plugins>
    <plugin>
      <groupId>com.example</groupId>
      <artifactId>hash-plugin</artifactId>
      <version>1.0-SNAPSHOT</version>
      <executions>
        <execution>
          <phase>install</phase>
          <goals>
            <goal>displayhash</goal>
          </goals>
          <configuration>
            <msg>MinhaMensagem</msg>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

Enter fullscreen mode Exit fullscreen mode

Quando você executa mvn install, o Maven irá calcular o hash SHA-256 da string "MinhaMensagem" e exibi-lo no console.

Para atribuir o encoding passando usando mvn package -Dparametro.encoding="ISO-8859-1" e com isso o encoding para de UTF-8 para ISO-8859-1.

Conclusão

O Apache Maven é uma ferramenta de gerenciamento de projetos poderosa e flexível. Ele simplifica muitos aspectos do desenvolvimento de software, desde a construção de projetos até a documentação. Com sua capacidade de criar plugins personalizados, o Maven pode ser adaptado para se adequar a uma grande variedade de necessidades de desenvolvimento de software.

Referências

  1. Apache Maven Project. (2021). Introduction to the Build Lifecycle. Disponível em: https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html.

  2. Apache Maven Project. (2021). Guide to Developing Java Plugins. Disponível em: https://maven.apache.org/guides/plugin/guide-java-plugin-development.html.

Top comments (2)

Collapse
 
khmarbaise profile image
Karl Heinz Marbaise

I strongly recommend not to use the old style way to define plugins @goal displayhash this is long time deprecated and should be replaced by using annotation as shown in the referenced link for Maven plugin development...

Collapse
 
pedropietro profile image
Pedro Pietroluongo

Thanks for the tip. Article updated.