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();
}
}
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>
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
Apache Maven Project. (2021). Introduction to the Build Lifecycle. Disponível em: https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html.
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)
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...Thanks for the tip. Article updated.