sábado, 1 de setembro de 2012

Maven, mais que um gerenciador de libs!

Ultimamente temos conversado com muita gente sobre qualidade, ferramentas e boas práticas de desenvolvimento de software. Nessas conversas, percebemos que muita gente já ouviu falar do Maven, mas tenho notado uma visão muito minimalista sobre ele. É comum que saibam apenas que ele serve para gerenciar dependências (libs, jars, etc), mas ele serve para muito mais que isso!


Maven pela Apache

Segundo a Apache e o site oficial, o Maven é uma ferramenta de entendimento e gerenciamento de projeto. Ela se baseia no conceito de Project Object Model (POM), com o qual o Maven gerencia a construção, reporte, documentação e entrega de projetos a partir de um único arquivo.
Segundo a sua própria documentação, os principais objetivos do Maven são:
  • Tornar o processo de construção fácil
  • Prover sistemas de construção uniformes
  • Prover informações sobre o projeto com qualidade
  • Prover guias para melhores práticas de desenvolvimento
  • Permitir migração transparente para novas funcionalidades

Gerenciar dependências

A utilização mais básica do Maven é para o gerenciamento de dependências, ou seja, gerenciar as bibliotecas que uma aplicação utiliza. Normalmente, a utilização do Maven é motivada pela facilidade de gerenciar os jars que uma aplicação utiliza (Java). 

Como fazer?

No POM, o arquivo de configuração do Maven, são definidas as dependências do projeto. Para isso, devem ser utilizadas, basicamente, as tags <dependencies> e <dependency>. A primeira, encapsula as dependências de seu projeto, indicando que elas serão declaradas dentro desse objeto no arquivo XML. A Segunda tag, é utilizada para declarar cada uma das dependências do projeto. Essa tag pode possuir as seguintes informações: groupId, artifactIdversion, type, scope, opitional.

Para exemplificar, na figura ao lado, é mostrada a configuração da dependência TestNG no POM. Na tag dependency, é definida que o artefato testng é da org.testng e que deve ser utilizada a versão 6.3.1. Além disso, é indicado o escopo test, que indica que o testng é disponível apenas durante a execução de testes e pode apenas ser utilizado por classes no pacote de teste.


O Maven vai além disso

Apesar dessa utilização básica, essa ferramenta auxilia o desenvolvimento de várias outras formas, dentre elas, algumas que eu utilizei são:
  • Configuração da aplicação: definindo parâmetros como quantidade de conexões com o banco de dados ou timeout de seção.
  • Definição de perfis: desenvolvimento, teste, homologação, produção, etc.
  • Parametrização das configurações: definição de quais libs cada perfil deve utilizar, por exemplo, de acordo com o servidor que irá executar a aplicação web (GlassFish, JBoss, Jetty, etc).
  • Distribuição da aplicação para outros projetos: por exemplo, empacotado como jar e fazendo upload para o Nexus, servidor de dependências do Maven.
  • Substituição de arquivos: na troca de arquivos que devem ser considerados apenas em desenvolvimento, teste ou produção.
  • Configuração de execução de testes: quais testes devem ser executados e, se receberem, quais devem ser seus parâmetros de configuração
  • Definição de sub-projetos ou módulos: dividir dependências ou agrupar informações sobre a construção de diversos projetos em vários POMs.
Essa ferramenta é muito poderosa e gerencia desde a compilação até a distribuição e deploy de uma aplicação. Eu a utiliza a 5 anos e não tenho dúvidas de que ela auxilia na organização e manutenção de um projeto de software.
Colocarei em próximos posts mais aplicações sobre ela e como fazer algumas coisas interessantes.

Nenhum comentário:

Postar um comentário

Obrigado por deixar seu comentário. Em breve ele estará publicado.