Integración

Gradle vs Maven: Definiciones y diferencias principales

Existen dos líderes para el desarrollo de software que han ganado terreno durante un tiempo considerable y hoy, uno más que otro, se constituye como el más utilizado y galardonado en el mundo de la informática.

Hablamos de la famosa dicotomía Gradle vs Maven. Te invitamos a conocer todo sobre estas herramientas de programación y sus diferencias en relación al rendimiento, experiencia de usuario, flexibilidad y gestión de dependencias para que selecciones la que mejor se adapte a tus necesidades.

Qué es Maven

Maven es una herramienta de gestión de proyectos de desarrollo utilizada principalmente en el entorno de computación Java utilizando conceptos provenientes de Apache Ant.

Es muy utilizada en proyectos WSO2, es profundamente personalizable, permitiendo finalizar tareas complejas de forma rápida y reutilizando los resultados de ejecuciones pasadas.

La configuración de un proyecto se basa en un fichero XML en el cual se declaran los requerimientos para la construcción.

Maven añade principalmente las siguientes funcionalidades a Apache Ant:

  • Gestión de repositorios: Son ubicaciones que almacenan jars que serán necesarios para el build. Existen tres repositorios: local, central y remoto. El primero se halla en la máquina donde se realiza el build y los otros dos se accede en forma remota por http. Maven se centra primero en el local para la búsqueda de un jar, si no lo encuentra buscará en remoto y lo descargará a local para acelerar futuras construcciones.

  • Gestión de dependencias: Son declaraciones de los jars que necesita el proyecto para su construcción.

  • Gestión del ciclo de vida: Parte de unas metas y fases previamente establecidas.

Ejemplo de proyecto HelloWorld en maven (pom.xml)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>gs-maven</artifactId>
    <packaging>jar</packaging>
    <version>0.1.0</version>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>
  • Personalización: Para añadir una meta es necesario desarrollar un plugin Java extendiendo la clase AbstractMojo y luego añadirlo al fichero pom.xml.

<build>
  <plugins>
    <plugin>
      <groupId>sample.plugin</groupId>
      <artifactId>hello-maven-plugin</artifactId>
      <version>1.0-SNAPSHOT</version>
      <executions>
        <execution>
          <phase>compile</phase>
          <goals>
            <goal>sayhi</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

Qué es Gradle

Gradle es una herramienta de automatización de compilación del código abierto, que obtuvo una rápida popularidad ya que fue diseñada fundamentalmente para construir multiproyectos, utilizando conceptos provenientes de Apache Maven.

Gradle mejora principalmente las siguientes funcionalidades de Maven:

  • Lenguaje: Gradle no emplea el lenguaje XML, sino que se basa en DSL ya que se focaliza en la resolución de un problema específico, colaborando en construcciones sumamente estructuradas, eficientes y mantenibles para múltiples proyectos.

  • Gestión del ciclo de vida: Añade la capacidad de soportar todo el proceso de vida del software (desde la compilación, pruebas, análisis estadístico e implementación).

Ejemplo del mismo proyecto HelloWorld en gradle (settings.gradle)

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'application'

mainClassName = 'hello.HelloWorld'

repositories {
    mavenCentral()
}

jar {
    baseName = 'gs-gradle'
    version =  '0.1.0'
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile "joda-time:joda-time:2.2"
    testCompile "junit:junit:4.12"
}
  • Personalización: Para personalizar una tarea simplemente se añade al fichero groovy (build.gradle).

println 'This is executed during the configuration phase.'

task configured {
    println 'This is also executed during the configuration phase.'
}

Gradle vs Maven: diferencias principales

A continuación, destacamos las diferencias más importantes que existen entre Maven y Gradle.

Gradle

Maven

El tiempo de construcción de Gradle es corto y rápido

El rendimiento de Maven es lento en comparación con Gradle

Los scripts de Gradle son mucho más cortos y limpios

Los scripts de Maven son un poco largos en comparación con Gradle

Utiliza lenguaje específico de dominio (DSL)

Utiliza XML

Se basa en la tarea mediante la cual se realiza el trabajo

En Maven se definen objetivos vinculados al proyecto

Admite compilaciones incrementales de la clase java

No admite compilaciones incrementales

Soporte en la mayoría de herramientas de Integración continua

Soporte en la mayoría de herramientas de Integración continua

¿Cuál debo elegir Maven o Gradle?

La clave está en la flexibilidad, si el proyecto se puede gestionar con metas standard o con poca personalización entonces Maven es suficiente, por otro lado si el proyecto requiere diferentes comportamientos en función de múltiples variables en tiempo de construcción quizá Gradle responda más eficazmente a esos requerimientos.

Si deseas obtener mayores detalles acerca de estas poderosas herramientas, contáctanos y te asesoraremos sin compromiso.

Implementa WSO2 paso a paso en tu empresa

Descubre todo lo que necesitas saber para integrar los sistemas de tu empresa con WSO2 con nuestra guía. ¡Incluye casos de éxito!

Written By

Gustavo Vázquez

Arquitecto de Soluciones