Atenção: esse artigo tem um vídeo complementar. Clique e assista!
Neste artigo abordaremos os principais conceitos relacionados à construção de plug-ins para o Maven. Em seguida desenvolveremos um exemplo completo para automatizar a criptografia de classes durante o build de um aplicativo. Por fim, mostraremos como utilizar o novo artefato em uma aplicação web.
Para que serve:
O Maven é hoje a ferramenta padrão para construção de aplicativos e o entendimento dos conceitos envolvidos no projeto e construção de plug-ins permite ao desenvolvedor customizar essa ferramenta para a realização de tarefas não usuais.
Em que situação o tema útil:
A construção de plug-ins para o Maven possibilita adicionar funcionalidades não existentes ao framework e com isso incluir no ciclo de build a automação de atividades particulares a uma empresa ou projeto, evitando assim desperdícios de tempo e esforço.
Resumo DevMan:
O Maven se tornou o padrão de build de aplicações Java. Além de facilidades como projeto declarativo e resolução automática de dependências, um dos grandes atrativos do framework é o extenso uso de plug-ins: componentes responsáveis pela realização de cada uma das atividades envolvidas no processo de build.
Neste artigo exploramos os principais conceitos dos plug-ins, mostrando o poder fornecido por esses pequenos artefatos, que são responsáveis desde a limpeza do projeto até a execução dos testes e o empacotamento do aplicativo. Para tornar a explicação mais didática incluímos a construção de um exemplo completo, contemplando desde a criação do artefato até seu uso em uma aplicação web.
O Maven se tornou o padrão de build para aplicações Java, e hoje faz parte do arsenal de ferramentas da maioria dos desenvolvedores. Grande parte do sucesso do framework advém da sua flexibilidade e de um conceito simples e extremamente poderoso: plug-ins.
Os plug-ins permitem o reuso da mesma lógica em projetos distintos, e seu uso é simples e totalmente declarativo (através da configuração do POM). Como o comportamento do plug-in pode facilmente ser customizado através da configuração dos seus parâmetros, é possível utilizar o mesmo componente em situações distintas.
O framework é estruturado e funciona em cima de um conjunto de plug-ins que, individualmente, são os responsáveis por todas as tarefas executadas durante o processo de build. Assim, plug-ins executam desde a ação mais simples de todas, que é a limpeza do projeto, até tarefas muito mais elaboradas, como a criação de um EAR.
O Maven possui uma infinidade de plug-ins “prontos para uso” e muitos outros são fornecidos por terceiros (soluções open-source ou proprietárias). Apesar disso, muitas vezes pode haver a necessidade de se incluir uma tarefa especial no ciclo de construção do aplicativo, algo particular a um determinado projeto ou empresa e cuja automação pode facilitar (e muito) a vida do desenvolvedor. Nesse contexto é importante entender como os plug-ins funcionam e como podemos construí-los, tirando assim ainda mais proveito do framework.
Fases, Goals e Mojos
O Maven possui uma ampla documentação disponível para aqueles que estão iniciando na ferramenta. Mesmo assim, vamos fazer uma pequena revisão de conceitos importantes para o escopo deste artigo: fases, goals e Mojos.
A ferramenta abstrai o processo de construção de um aplicativo através do conceito de “ciclo de vida de build”. O ciclo representa o que acontece durante o processo de build de um aplicativo e é composto por diversas fases sequenciais. As fases são etapas comuns a qualquer tipo de projeto Java (limpeza, compilação, testes, empacotamento, etc.) e ocorrem numa ordem lógica quando o build é disparado.
A cada fase do build são associados um ou mais goals, que são ações que são executadas quando uma fase é alcançada. Um Mojo descreve os metadados de um goal: o seu nome, em que fase ele é disparado e que parâmetros ele suporta. Como veremos adiante, goals e Mojos têm relação direta com os plug-ins.
Plugins
Um plug-in é um artefato que contém um ou mais Mojos e um descritor, denominado plugin.xml. De forma simplificada podemos entender um plug-in como um agrupamento de vários Mojos que executam funções relacionadas. Os plug-ins são gerenciados pelo Plexus e podem se relacionar uns com os outros.
O Maven suporta plug-ins escritos em Java ou ainda em linguagens de script como o Groovy. A implementação escolhida, no entanto, é transparente ao desenvolvedor final que apenas declara no POM os plug-ins que serão utilizados no seu projeto. A partir daí, o Maven é o responsável por “chamar” os diversos goals do plug-in no momento adequado.
plugin.xml
O descritor contém os metadados do plug-in e expõe suas propriedades, incluindo seus parâmetros, fase de execução, dependências, etc. Quando o Maven carrega um plug-in ele interpreta o arquivo plugin.xml e a partir das informações disponíveis instancia e configura o artefato apropriadamente.
...