Felipe VS Maven... Maven wins

Gostaria de repassar aos colegas desenvolvedores uma das minhas últimas conquistas, conseguir entender e domar o maven para o gerenciamento do build (e algunas cositas más) em meus projetos Java.

Vou relatar um pouco das minhas opiniões (e de alguns colegas) sobre o uso do maven:
- Muito complexo e cheio de configurações;
- O que ele faz eu faço na mão, de maneira muito mais simples e ágil, fugindo de possíveis entraves da ferramenta;
- É preciso refazer as configurações de tempos em tempos e isso toma muito tempo nos projetos;

 Bom, após muito sofrimento, horas de configurações, leitura de tutoriais, acesso a blogs, etc. e do grande auxilio e paciência de dois profissionais feras - Edgard Leite da Image e Luiz Eduardo Rodrigues do Tribunal de Contas do Paraná - consegui ver a luz no fim do túneo e o melhor, ver o quanto esta ferramenta é poderosa e útil. Quero ressaltar que qualquer um que for usar o maven deve antes entender de forma clara suas funcionalidades, as formas corretas de configuração (e para que elas servem), pois isso vai reduzir e muito retrabalhos futuros e problemas com compilação ou execução em seus projetos.

O maven se propõe a ser uma ferramenta de build de projetos, mas afinal o que é isso? É simples e vou tentar explicar de forma prática e casual.

Para o correto funcionamento de nossos projetos precisamos sempre ter em mente suas fases de construção ou criação, o desenrolar de seu desenvolvimento (adição ou atualização de módulos ou bibliotecas e/ou refactoring) e por fim como o mesmo será disponibilizado para o cliente (será uma biblioteca .jar, um projeto web .war, um módulo ou projeto de um ambiente maior contido em um conjunto de projetos .ear). Este último é um passo bem importante e relevante, pois irá definir como nosso projeto vai se relacionar com outros projetos ou outras bibliotecas (ou seja, suas dependências). Talvez o que tenha me atrapalhado no uso com o maven se deva ao fato de eu ter pego um projeto já configurado, com diversas dependências e particularidades que são bem difíceis de entender quando não se tem experiência com esta ferramenta.

O build do projeto acontece então desde o princípio para validar os relacionamentos e dependências que constituem o core de nosso projeto - neste ponto é necessário saber o que realmente deverá seguir com o projeto e o que será disponibilizado pelo ambiente onde o mesmo será executado. Dessa forma se evita problemas básicos de ausência de bibliotecas ou excesso delas. Aqui vale ressaltar que o uso do IDE Eclipse com o plugin do maven muda e muito a forma do funcionamento do build dos projetos e de acordo com a configuração do ambiente de desenvolvimento pode gerar uma série de facilidades, mas também pode confundir bem a cabeça dos profissionais que sempre usaram o eclipse com ANT ou com os wizards da IDE. Sofri bastante até entender o grau de integração do Eclipse com o maven e o quanto isso poderia impactar na forma como a IDE trata os projetos controlados pela ferramenta. Aliás, configurar o Eclipse com o plugin do maven é um ponto que deve ser visto com muita atenção. Passei por algumas situações complicadas como por exemplo o plugin pegar a configuração a partir do usuário que eu usei para abrir o IDE e não o que estava definido em suas configurações nas preferencias do plugin ou de o mesmo não conseguir executar alguns comandos em um momento e depois sem motivo ele executar (mistérios da tecnologia). Porém, fora isso, ele é muito parrudo e um grande facilitador. Além disso a IDE permite configurar o xml de configuração do projeto (pom.xml) de forma visual e muito intuitiva e isso é de grande valia(apesar de algumas vezes eu preferir o modo texto).

No meu caso haviam diversos módulos separados em projetos diferentes, com cada um deles tendo suas particularidades na construção do projeto final. Alguns eram projetos que deveriam ser disponibilizados como bibliotecas, outros como projetos web e outros eram apenas módulos de componentes dos outros projetos. Cada qual possuia suas configurações, o que no início me parecia muito confuso e gerador de conflitos, mas depois se mostrou versátil e dava aos projetos uma independência totalmente necessária. Com as configurações que estes projetos tinham era possível em um build atualizar as bibliotecas a partir de um repositório web ou local, testar todos (junit), exportar 4 deles como bibliotecas (.jar) independentes, montar os projetos web (.war) com seus módulos de core e view sendo agregados e atualizados dinamicamente e por fim gerar o .ear que continha todos os projetos web e suas depedências.

Agora que tenho a clara visão do funcionamento do maven, o porquê de sua estrutura, a forma como o plugin se relaciona com a IDE e a forma como os módulos de projeto se relacionam vejo o quanto esta ferramenta auxilia no trabalho dos desenvolvedores e o quanto a mesma é uma revolução na forma de se construir e manter projetos Java. Deixo claro que só é possível usar maven de forma satisfatória mudando a visão de como se trabalha no desenvolvimento de projetos - é preciso quebrar este paradigma. Não disponibilizei nenhum material ou tutorial sobre o assunto, pois já existe uma imensidão de conteúdo para isso (links no final da postagem), mas este relato é para aqueles que estão na dúvida se devem ou não usar esta ferramenta ou que já usaram e passaram por maus bocados. Eu penei com a mesma por ter ido por um caminho errado. O correto é aprender bem e não ficar tentando fazer remendos ou entender mais ou menos. Eu recomendo e afirmo que bem usada ela aumentará a produtividade de forma significativa.

Sites para referência e estudos:
maven.apache.org
Tutorial Maven
Better Builds With Maven

Comentários