3
respostas

Maven ou Gradle

Olá,

Gostaria de saber qual a diferença entre Maven e Gradle. Vejo que a comunidade ultimamente vem adotando bastante Gradle. E se a Alura tem intenção de um dia lançar um curso de Gradle.

Abraços.

3 respostas

Bom o mercado ainda utiliza bastante o maven, existem milhares de projetos em maven, então é importante você conhecer bem o Maven pois ainda vai durar muito.

Agora vamos ao Gradle:

O Gradle é uma ferramenta mais robusta que o Maven, e você vai entender o porquê digo isto. Os scripts do Gradle são declarativos, de fácil leitura, e expressivo. Escrever o código em Groovy ao invés de XML como fazemos no maven, o tamanho de um script é bem menor e muito mais legível.

DSL expressiva e API rica: A chave para utilizar todo o poder do Gradle é conhecer a fundo sua API, nela podemos encontrar todas as classes e entender bem tudo o que o Gradle já nos entrega nativamente para trabalharmos de forma eficiente e rápida. Como toda documentação no mundo Java, ela tem sua pagina HTML para ser acessada a qualquer momento.

Gradle é Groovy: Ant e Maven são puro XML, e XML pode ser de primeiro encontro muito simples para escrever e ler, porém, com o tempo pode se tornar muito difícil para dar manutenção e fazer melhorias. Gradle é escrito em Groovy, uma linguagem mais simples e dinâmica, por esse motivo temos uma facilidade muito grande em escrever nosso arquivo de build em forma de script.

Convenções flexíveis: Uma das grandes ideias de Gradle é ser flexível quanto a padrões para seus projetos. Cada projeto Java tem uma convenção básica e o Gradle sabe exatamente onde fica o código fonte e as classes de teste dessa convenção, e como compilar o código, executar testes unitários, gerar o javadoc, e criar uma release do seu código. Essas tarefas são totalmente integrada no ciclo de vida do build. Se você manter a mesma convenção de projetos Maven, ele automaticamente vai saber onde está o código, com isso há um esforço mínimo de configuração de sua parte. Na verdade, o seu build terá somente uma linha.

Gestão de dependências robusta: Gradle fornece uma infraestrutura para gerenciar a forma como é resolvida, recuperada, e armazenada as dependências de um projeto. Uma vez que foram baixadas e colocadas em seu cache local, elas são disponibilizadas para o seu projeto. Um requisito fundamental para os builds é a reprodutibilidade. Você já ouviu alguma vez o seu colega de trabalho dizer: “Mas funciona na minha maquina”? Os builds tem que produzir o mesmo resultado em diferentes ambientes, independente do conteúdo de seu cache local. Gerenciadores de dependência como Ivy e Maven ainda não podem garantir totalmente a reprodutibilidade do build. Por que isso acontece? Sempre que uma dependência é baixada e armazenado no cache local, ela não leva em conta a origem do artefato. Em situações em que o repositório de código é modificado para um projeto sem a alteração da sua versão, a dependência em cache é considerada resolvida, mesmo que o conteúdo do artefato seja ligeiramente diferente.

Builds escaláveis: Em algumas empresas, os projetos podem conter centenas de módulos em sua estrutura. Construir e testar pequenas mudanças de código pode consumir muito tempo. Devido a sua clara definição de dependências entre os submodulos do projeto, Gradle cuida de fazer o build apenas das partes necessárias.

Para melhorar o desempenho de inicialização, Gradle pode ser executado em modo daemon. Invocações subsequentes do build irão fazer a chamada para o processo do Gradle, que já vai estar rodando em background.

Como resultado, você vai notar que o build irá executar aproximadamente 25% mais rápido.

Fácil de extender: A maioria das empresas tem uma forma diferente de fazer o build, e uma forma diferente de resolver os mesmos problemas. A maneira mais fácil de implementar lógica personalizada é escrevendo uma task. As tasks podem ser definidas diretamente no script do seu build, sem dificuldade alguma. Se você sentir que sua task está ficando complexa, você pode criar uma classe pra encapsular o código, tornando a estrutura fácil de entender e sustentável.

Integração com outras ferramentas: Se você está utilizando uma ferramenta como o Ant, o Gradle não força você a migrar totalmente o seu build, ao invés, ele permite você importar a lógica do seu script Ant e reutilizar seus targets. O Gradle é 100% compatível com os repositórios Maven e Ivy.

Orientado pela comunidade e suporte corporativo: Gradle é uma solução totalmente open source com a Apache License 2.0. Depois do seu primeiro Release em Abril de 2008, a comunidade abraçou o projeto e deu andamento ao seu desenvolvimento. O código está no GitHub.

Conclusão: O principal problema que eu vejo é que a equipe tem que aprender uma nova linguagem que é o groovy, e a ideia é que o build seja algo simples e declarativo. Se você deve aprender maven ou gradle? Você deve aprender os dois e mais um pouco, como ant. Tenha em mente que a maioria das empresas utilizam o maven, mas temos exceções.

Boa sorte com os estudos!!!

Bom dia Peres. A difrença é na forma de configuração, realmente o gradle tem crescido muito! Deixa uma sugestão aqui para esse curso:

https://docs.google.com/forms/d/e/1FAIpQLScwKyaSvuFXK9SmMJoLPuYAS2qD_XAAnZPxMZij9qVeflbhBg/viewform

Fala Peres, tudo bem?

Vou dar minha opinião pessoal, já trabalhei com as duas ferramentas (Maven e Gradle) em projetos grandes.

No geral, ambas as ferramentas têm seus respectivos pontos fortes e fracos.

O Gradle é realmente poderoso e flexível, mas também complexo, difícil de aprender e manter. Tivemos alguns problemas com as últimas versões do Gradle, pois a compatibilidade com os plugins existentes vem sendo quebradas e os mantenedores desses projetos de código aberto não conseguem acompanhar essa velocidade de atualizações.

Tirando o efeito "entusiasta" por ser uma ferramenta mais nova, particularmente não vejo de uma forma geral grandes benefícios no Gradle, o Maven continua atendendo bem as necessidades dos projetos.