¿Por qué debería preferir Gradle a Maven?

Es mucho más simple y poderoso que maven. Tengo una construcción multiproyecto de más de 40 años que fue relativamente fácil de configurar con Gradle, pero no tengo ni idea de si sería posible hacerlo con Maven, al menos sin tener que escribir algunas clases de Java.

EDITAR (detalles de por qué es más simple): no usar XML mejora la lectura. El uso de un DSL basado en Groovy le brinda mucha más flexibilidad y potencia; puede definir fácilmente tareas personalizadas, condicionales, etc., todo en sus scripts; Muchas de las tareas y propiedades del proceso de compilación estándar se cierran para que pueda agregar sus propios ganchos a las tareas donde necesita personalizar algo. Las compilaciones multiproyecto son mucho más fáciles de hacer con Gradle que con Maven (alguna vez trató de hacer una con Maven? Parent-pom, dependencias heredadas, etc., es una pesadilla). Puede tener un control detallado si lo necesita o simplemente ajustar un par de valores predeterminados y obtener los resultados que desea.

Este es un ejemplo de un pompón Maven relativamente simple:

https://github.com/chochos/jAlar…

Y este es el mismo archivo de compilación en Gradle:

https://github.com/chochos/jAlar…

Pero no solo creas mi palabra. Ve a leer el blog de Graeme Rocher sobre por qué y cómo cambiaron Grails de Maven a Gradle; Creo que Laforge también escribió algo sobre cambiar Groovy de Maven a Gradle.

Veamos en detalle por qué Android adoptó Gradle
Los puntos clave para que Google siga adelante con Gradle para su desarrollo de Android son

  • Cree múltiples APK para su aplicación con diferentes características usando el mismo proyecto (cree varias variantes de una aplicación)
  • Reutilizar código y recursos.
  • Personalice, configure y amplíe el proceso de compilación.
  • Integración personalizada con su propio IDE Android Studio.
  • Herramientas de construcción única para soportar múltiples idiomas.

Tenían algunos requisitos especiales para su ecosistema diverso, trabajaron con el equipo de desarrollo de gradleware para incluir funciones personalizadas para la aplicación de Android. Incluso tienen IDE personalizado para desarrolladores de Android basados ​​en gradle.

Ahora puedes hacer preguntas como,
¿Cuál es su herramienta de salida / equipo / organización?
¿Con qué se sienten cómodos?
¿Será una migración o vas a hacer todo desde cero?
¿Cuál es su caso de usuario?

Te sugiero que revises la lista de verificación que figura en este enlace.

¿Por qué Gradle o Maven?

Lo anterior le dará más detalles sobre el sistema de compilación Gradle y la lista de verificación de adopción en comparación con Maven.

Por ejemplo

¿Qué podemos estar buscando en las herramientas de construcción?

  • ¿Qué tan fácil es la curva de aprendizaje?
  • ¿Qué tan rápido son diferentes compilaciones con cada herramienta?
  • ¿Qué tan complejo es crear y mantener el script de compilación?
  • ¿Cuántos complementos existen y qué tan simple es personalizar sus propios complementos?
  • ¿Qué tan buena es la comunidad y la documentación para cada herramienta?
  • ¿Qué tan bien se integra cada herramienta con las herramientas de desarrollador? (IDE, servidor de aplicaciones, servidor CI).

Puede agregar algunos casos de uso más y decidir la herramienta adecuada.

Hay muchas características individuales en Gradle que son muy agradables y superiores a las disponibles en Maven, pero lo más importante es la diferencia fundamental en la arquitectura:

Maven impone una división estricta entre configuración y extensión. Gradle usa un lenguaje de secuencias de comandos (Groovy) para ambos.

En Maven, configura cosas en XML y escribe extensiones en Java. Escribir extensiones se considera un tema bastante esotérico, y la mayoría de las personas no lo hacen.

En gradle, configura cosas con el código Groovy y escribe extensiones en Groovy. Esto hace que el límite entre la configuración y la extensión sea difuso, y eso puede ser algo bueno.

A veces, desea un poco más de flexibilidad que la que ofrecen las opciones de configuración estándar, y puede lograrlo escribiendo una o dos líneas de código. En Maven, inmediatamente debe saltar el gran abismo entre la configuración y la extensión y comenzar a escribir código Java. En Gradle, simplemente coloca un código Groovy en su build.gradle.

Por cierto, Groovy es el lenguaje de script óptimo para este propósito, no porque sea a priori mejor que Scala (usado en sbt) o Ruby (usado en Buildr), sino porque es extremadamente similar al lenguaje que los desarrolladores de Java Ya lo sé: Java. Básicamente es Java con los cambios suficientes para convertirlo en un lenguaje de secuencias de comandos de tipo dinámico.

Gradle es Groovy!

Disculpe el juego de palabras. Gradle es un DSL Groovy para definir tareas, dependencias y mucho más.

Gradle proporciona las características que necesita de Maven y las características que ama de Ant.

Convertir proyectos de Ant es trivial ya que Gradle admite tareas Ant y crea scripts directamente.
La conversión de proyectos de Maven es bastante sencilla, solo hay unos pocos complementos de Maven para los que no hay soporte de Gradle o Ant.

Es muy sencillo definir su propia tarea y agregarla como dependiente de la tarea desde un complemento diferente.

Gradle brilla cuando tus proyectos tienen muchos módulos o subproyectos. La construcción de un proyecto que tiene más de 300 módulos y 2 millones de loc toma solo un minuto para pequeños cambios.

El soporte de Gradle en Eclipse, Netbeans e IntelliJ maduró rápidamente.

Echo de menos los arquetipos de Maven y la gestión de dependencias en el repositorio local, el caché de Gradle no me ayuda cuando proyectos separados usan las mismas dependencias.

Google está adoptando Gradle para las herramientas de desarrollo de Android.

Cada vez que veo

No usar XML mejora la lectura.

No puedo evitar decir aarrrghhh. No entiendo por qué se culpa tanto a XML con respecto a la legibilidad. El formato XML Maven es muy simple de usar y si alguien encuentra esta estructura difícil de entender, le deseo buena suerte con DSL. También este comentario:

parent-pom, dependencias heredadas, etc. es una pesadilla

No puedo decir que Gradle sea incluso un poco mejor que Maven cuando se trata de administrar sus dependencias. No tiene un mecanismo de verificación de dependencia adecuado / incorporado.

Los que existen son horribles de leer (no vienen con dependencyInsight, es una mierda). El ejemplo dado de jAlarms muestra cuán fea es la sintaxis de Gradle. Cuando abre el archivo pom, puede ver todo de un vistazo, pero cuando se trata del archivo Gradle, necesita pasar bastante tiempo para ver qué dependencia es para qué configuración, con qué versión, etc.

Realmente no tengo la idea de usar Gradle, si necesita tener una lógica de compilación realmente compleja, entonces podría ser una opción, pero para la mayoría de los casos Maven debería ser la opción.

Prefiero Gradle a Maven porque:

  • Capacidad para definir una o más tareas predeterminadas
  • Soporte y acceso a otras herramientas de compilación y sus repositorios
  • Explotación florestal
  • Creación dinámica de scripts y tareas dinámicas
  • Legibilidad en comparación con Maven
  • Soporte multiproyecto

More Interesting

¿Cuáles son sus principales preocupaciones cuando externaliza la fabricación en el extranjero?

¿Cuál es la mejor manera de trazar un mapa de ruta del producto y crear listas detalladas de características para el desarrollo de software?

¿Las estrategias basadas en datos son parte de la gestión de productos?

¿Cuáles son las mejores aplicaciones alternativas con soporte móvil para Trello?

¿Cuáles son los buenos KPI de desarrollo de productos?

¿Qué combinación de materiales podría usar para crear una estera de yoga que tenga agarre, durabilidad, sea ecológica y tenga diseños complejos impresos?

¿Dónde está la línea para MVP (productos mínimos viables)? ¿Cuáles son sus principios / pautas para definir su MVP, en particular dónde dejar de construir demasiado?

¿Qué debe hacer un gerente de producto?

¿Las pruebas de multitudes pueden reemplazar a un equipo interno de calidad?

¿Podría un primer ministro describir su experiencia en el envío de un producto / característica de principio a fin, del concepto al lanzamiento?

¿Cuál es la mejor manera de desarrollar habilidades de gestión de productos?

¿Qué importancia tienen los servicios de desarrollo de diseño de producto / modelo?

Gestión de productos: para una nueva característica de un producto, ¿cómo se define el éxito y cómo se mide?

¿Cómo es un día típico para un gerente de producto en Asana?

No tengo habilidades técnicas en el desarrollo de productos. ¿Cómo hago para desarrollar un prototipo de mi idea (un dispositivo)?