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 têm 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 era isso que acontecia.
Quando se inicia um
projeto Java, se tem um setup muito pesado e que às vezes demora
bastante, porque tem que se criar toda uma infra-estrutura de
diretórios, 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?
Caos
No
mínimo dois dias configurando e instalando coisas na máquina do
desenvolvedor. Para variar, você se esquece de algo e começa a dar
problemas de ambiente. Assim a brincadeira vai até que as coisas se
estabilizem.
Configuração do Desenvolvimento = Configuração de Produção
Claro
que sim. Mas não para tudo. Já tive projetos em que a gerência de
configuração era um peso e não um alivio. Quando se começa a ter
ambientes muito distintos e com configurações totalmente diferentes,
começam a 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
será 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: No Maven os projetos são estruturados de forma modular. Quando eu faço
o build no pai, ele faz o build para cada filho, isso é muito útil.
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 plugins. O próprio core do Maven é feito de plugins,
que vão desde o que faz o *clean* ao que gera o
Javadoc ou o 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.
6. Gerência 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 provê a
gerência de jar, 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, aproveitando mesmo, que é
diferente de copiar e colar.
4. Contexto e Informações: Com o Maven é possível ter de forma contextualizada as informações úteis do projeto. Ele pode gerar um site contendo:
- Lista de Desenvolvedores
- Links para o controle de versão
- Links para o sistema de build contínuo
- Links para o sistema de issue tracking
- Lista de discussão
- Dependências do projeto
- Resultado da execução dos testes
- Javadoc e documentação
E
muito, muito mais. Pois tudo isso pode ser customizado e parametrizado.
Tudo isso pode ser coletado e condensado no site de forma automática no Maven.
3. Ciclo de Vida:
Diferente do ant, o Maven tem todo um ciclo de vida definido. Assim, à
medida que algo vai acontecendo e ele vai mudando de estados no ciclo
de vida, determinados plugins (goals) serão executados. Você pode
parametrizar o que você quer que aconteça em cada momento do ciclo de
vida do Maven.
2. Foco na Qualidade:
O Maven incentiva que se criem testes unitários. De forma que quando você
faz o build ou gera um deploy em um servidor, ele roda
todos os testes unitários. Caso algum teste unitário falhe, 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, então 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, mas muito
mais simples com o Maven.
O outro ponto é a soma de tudo. O Todo
do Maven é maior que a soma de suas partes, porque com tudo isso temos
uma solução de gerência 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.