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.
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.