10 Motivos para Você Usar Maven
Qual desenvolvedor Java que já não fez um script ant? Ant é uma poderosa solução escrita em Java para automação de build. Eu já usei muito Ant, não tenho nada contra a solução, mas em um projeto você precisa muitos mais do que build.
Os scripts ant tem o seu valor, na verdade todo bom script seja ele em ant, bash, groovy ou no que for tem seu lugar ao sol. Não acho perda de tempo escrever esses scripts, mas acho absurdo ter que reescrever a mesma coisa várias vezes. Na prática é isso que acontecia.
Quando se inicia um projeto Java se tem um setup muito pesado e que as vezes demora bastante. Por que tem que se criar toda uma infra-estrutura de diretórios, tem que se configurar o framework A,B,C e D para funcionar com o X,Y e Z, bom quem já fez isso sabe a novela que é.
Um desenvolvedor novo?
No mínimo 2 dias configurando e instalando coisas na máquina do desenvolvedor. Para variar você esquece de algo e começa a dar problemas de ambiente, assim a brincadeira vai até que as cosias se estabilizem.
Configuração do Desenvolvimento != Configuração de Produção
Claro que sim. Mas não para tudo, já vive projetos que a gerencia de configuração era um peso e não um alivio. Quando começa-se a ter ambientes muito distintos e com configurações totalmente diferentes começam aparecer dificuldades para reproduzir bugs. Ou você acha que você não conseguiu reproduzir um bug só por que ele foi mal especificado? Nem sempre!
Maven é a solução pra tudo?
Bala de Prata?
Os scripts ant tem o seu valor, na verdade todo bom script seja ele em ant, bash, groovy ou no que for tem seu lugar ao sol. Não acho perda de tempo escrever esses scripts, mas acho absurdo ter que reescrever a mesma coisa várias vezes. Na prática é isso que acontecia.
Quando se inicia um projeto Java se tem um setup muito pesado e que as vezes demora bastante. Por que tem que se criar toda uma infra-estrutura de diretórios, tem que se configurar o framework A,B,C e D para funcionar com o X,Y e Z, bom quem já fez isso sabe a novela que é.
Um desenvolvedor novo?
No mínimo 2 dias configurando e instalando coisas na máquina do desenvolvedor. Para variar você esquece de algo e começa a dar problemas de ambiente, assim a brincadeira vai até que as cosias se estabilizem.
Configuração do Desenvolvimento != Configuração de Produção
Claro que sim. Mas não para tudo, já vive projetos que a gerencia de configuração era um peso e não um alivio. Quando começa-se a ter ambientes muito distintos e com configurações totalmente diferentes começam aparecer dificuldades para reproduzir bugs. Ou você acha que você não conseguiu reproduzir um bug só por que ele foi mal especificado? Nem sempre!
Maven é a solução pra tudo?
Bala de Prata?
Maven não é a bala de prata para seus problemas. Se você não usa maven vai ter todo o custo de adaptação ao paradigma e a curva de aprendizado. O Maven não vai resolver todos os seus problemas mas ele vai lhe ajudar em vários pontos.
10 Motivos para usar Maven
10 Build: O Maven vai fazer o build de sua solução. Ele utiliza muito o conceito de convenção sobre configuração. Logo se você colocar seus artefatos nas estruturas padrão do maven, não sera necessário configurar várias coisas que você configuraria com ant como o diretório de fontes, os recursos e para onde será gerado os binários.
9 Build Modular: Os projetos são estruturados de forma modular no maven, quando eu faço o build no pai ele faz o build para cada filho, isso é muito util. Assim não preciso recompilar todos os módulos ou quando eu quero isso não preciso fazer um a um.
8 Cascateamento: Outra grande feature do maven é o cascateamento de configurações. Graças a sua estrutura de hierarquias de POM. Desta forma eu não duplico configurações e todo o projeto filho de um POM herda todas as suas configurações. Com isso é possível fazer um balanceamento de configurações.
7 Plugins: No Maven tudo são plugin. O próprio core do maven é feito de plugins, esses plugin vão des do plugin que faz o *clean* ao plugin que gera o Javadoc ou o plugin que gera estatísticas da qualidade do seu projeto. Além de existirem muitos plugins para o maven você ainda pode criar o seu próprio plugin.
6 Gerencia de Dependências: Quem já não ouviu falar do *jar hell*? Quando usamos muitos frameworks em Java através de vários projetos, gerenciar esses artefatos e controlar as suas versões é um verdadeiro inferno. O maven prove a gerencia de jar e bem como de plugins. Esses artefatos não ficam em controle de versão. Isso mesmo você não cria uma pasta *lib* e coloca os jars lá dentro, eles ficam no repositório local do maven.
5 Consistência: No maven tudo é igual, você faz todas as parametrizações através do arquivo pom.xml e tudo da mesma forma. E tem mais o que você faz em um projeto pode ser aproveitado em outro projeto, aproveitado mesmo que é diferente de copiar e colar.
4 Contexto e Informações:Com o maven é possível ter de forma contextualiza as informações uteis do projeto. Ele pode gerar um site contendo:
3 Ciclo de Vida: Diferente do ant o maven tem todo um ciclo de vida definido. Assim a medida que algo vai acontecendo e ele vai mudando de estados no ciclo de vida, determinados plugins(goals) vão ser executados. Você pode parametrizar o que você quer que aconteça em que momento do ciclo de vida do maven.
2 Foco na Qualidade: O Maven incentiva que se criem testes unitários. De forma quando você faz o build ou gera um deploy em um servidor e nesses momentos ele roda todos os testes unitários. Caso algum teste unitário falhar ele aborda o build/deploy, essa é uma excelente política para forçar os testes e a qualidade de software.
1 Sol. GC: Foi complicado escolher qual seria a maior vantagem do maven, desta forma vou falar aqui de duas coisas. Primeiro da automatização. Com o maven você atinge rapidamente um nível de automatização muito alto e com pouquíssima configuração. Essa automatização se reflete no processo de release de um versão do seu software que fica muito, mais muito, mais simples com o maven.
O outro ponto é a soma de tudo. O Todo do maven é maior que a soma de suas partes, por que com tudo isso temos uma solução de gerencia de configurações. De forma que o desenvolvedor novo senta na cadeira e com um comando o maven baixa as dependências necessárias, roda os testes, configura o ambiente, baixa o servidor de aplicação, faz o deploy e abre o browser com a tela de login do sistema, tudo isso com um comando do maven.
Se você gostou deste post pode conferir outros posts que tenho sobre gerencia de configuração e maven:
10 Motivos para usar Maven
10 Build: O Maven vai fazer o build de sua solução. Ele utiliza muito o conceito de convenção sobre configuração. Logo se você colocar seus artefatos nas estruturas padrão do maven, não sera necessário configurar várias coisas que você configuraria com ant como o diretório de fontes, os recursos e para onde será gerado os binários.
9 Build Modular: Os projetos são estruturados de forma modular no maven, quando eu faço o build no pai ele faz o build para cada filho, isso é muito util. Assim não preciso recompilar todos os módulos ou quando eu quero isso não preciso fazer um a um.
8 Cascateamento: Outra grande feature do maven é o cascateamento de configurações. Graças a sua estrutura de hierarquias de POM. Desta forma eu não duplico configurações e todo o projeto filho de um POM herda todas as suas configurações. Com isso é possível fazer um balanceamento de configurações.
7 Plugins: No Maven tudo são plugin. O próprio core do maven é feito de plugins, esses plugin vão des do plugin que faz o *clean* ao plugin que gera o Javadoc ou o plugin que gera estatísticas da qualidade do seu projeto. Além de existirem muitos plugins para o maven você ainda pode criar o seu próprio plugin.
6 Gerencia de Dependências: Quem já não ouviu falar do *jar hell*? Quando usamos muitos frameworks em Java através de vários projetos, gerenciar esses artefatos e controlar as suas versões é um verdadeiro inferno. O maven prove a gerencia de jar e bem como de plugins. Esses artefatos não ficam em controle de versão. Isso mesmo você não cria uma pasta *lib* e coloca os jars lá dentro, eles ficam no repositório local do maven.
5 Consistência: No maven tudo é igual, você faz todas as parametrizações através do arquivo pom.xml e tudo da mesma forma. E tem mais o que você faz em um projeto pode ser aproveitado em outro projeto, aproveitado mesmo que é diferente de copiar e colar.
4 Contexto e Informações:Com o maven é possível ter de forma contextualiza as informações uteis do projeto. Ele pode gerar um site contendo:
- Lista de Desenvolvedores
- Links para o controle de versão
- Links para o sistema de build continuo
- Links para o sistema de issue tracking
- Lista de discussão
- Dedendências do projeto
- Resultado da execução dos testes
- Javadoc e documentação
3 Ciclo de Vida: Diferente do ant o maven tem todo um ciclo de vida definido. Assim a medida que algo vai acontecendo e ele vai mudando de estados no ciclo de vida, determinados plugins(goals) vão ser executados. Você pode parametrizar o que você quer que aconteça em que momento do ciclo de vida do maven.
2 Foco na Qualidade: O Maven incentiva que se criem testes unitários. De forma quando você faz o build ou gera um deploy em um servidor e nesses momentos ele roda todos os testes unitários. Caso algum teste unitário falhar ele aborda o build/deploy, essa é uma excelente política para forçar os testes e a qualidade de software.
1 Sol. GC: Foi complicado escolher qual seria a maior vantagem do maven, desta forma vou falar aqui de duas coisas. Primeiro da automatização. Com o maven você atinge rapidamente um nível de automatização muito alto e com pouquíssima configuração. Essa automatização se reflete no processo de release de um versão do seu software que fica muito, mais muito, mais simples com o maven.
O outro ponto é a soma de tudo. O Todo do maven é maior que a soma de suas partes, por que com tudo isso temos uma solução de gerencia de configurações. De forma que o desenvolvedor novo senta na cadeira e com um comando o maven baixa as dependências necessárias, roda os testes, configura o ambiente, baixa o servidor de aplicação, faz o deploy e abre o browser com a tela de login do sistema, tudo isso com um comando do maven.
Se você gostou deste post pode conferir outros posts que tenho sobre gerencia de configuração e maven: