Gradle

Ya hemos mencionado que Gradle es la siguiente generación de build tools, pero eso no quiere decir que sea una herramienta perfecta. Si bien es cierto provee muchas ventajas con respecto a las demás, hay algunos conceptos que aún no maneja. Una de esas es el concepto de Dependency Management.

Imaginemos que dentro de nuestro build.gradle tengamos la siguiente sección con el listado de dependencias.

dependencies {
    compile "org.springframework:spring-beans:4.3.5.RELEASE"
    compile "org.springframework:spring-context:4.3.5.RELEASE"
    compile "org.springframework:spring-core:4.3.5.RELEASE"

    testCompile "org.springframework:spring-test:4.3.5.RELEASE"
    testCompile "junit:junit:4.12"
}

En el mejor de los casos tenemos las versiones de las dependencias externalizadas como se muestra a continuación o haciendo uso del archivo gradle.properties:

ext {
    springVersion = '4.3.5.RELEASE'
    junitVersion = '4.12'
}

dependencies {
    compile "org.springframework:spring-beans:$springVersion"
    compile "org.springframework:spring-context:$springVersion"
    compile "org.springframework:spring-core:$springVersion"

    testCompile "org.springframework:spring-test:$springVersion"
    testCompile "junit:junit:$junitVersion"
}

Nuestros amigos de @springcentral han desarrollado un plugin que nos brinda el soporte de Dependency Management dentro de gradle. La versión 0.6.1 del plugin es compatible con gradle 2.x, mientras que la versión 1.0.0 soporta la compatilidad con gradle 3.x.

Para hacer uso del plugin dentro de nuestro proyecto debemos añadir el plugin usando una de las 2 formas mencionadas líneas abajo:

buildscript {
    repositories {
        maven {
            url 'http://repo.spring.io/plugins-release'
        }
    }
    dependencies {
        classpath "io.spring.gradle:dependency-management-plugin:1.0.0.RELEASE"
    }
}

apply plugin: "io.spring.dependency-management"

ó

plugins {
    id "io.spring.dependency-management" version "1.0.0.RELEASE"
}

Ahora, podemos hacer uso del DSL que el plugin provee. En el ejemplo, importaremos el pom de spring-framework que nos proveerá las versiones correctas de los artefactos y también indicaremos la dependencia de junit.

dependencyManagement {
    imports {
        mavenBom "org.springframework:spring-framework-bom:4.3.5.RELEASE"
    }
    dependencies {
        dependency "junit:junit:4.12"
    }
}

De ahora en adelante, ya que las versiones de nuestras versiones se encuentran centralizadas, solo nos encargaremos de agregar las dependencias que necesitamos omitiendo la versión.

dependencies {
    compile "org.springframework:spring-beans"
    compile "org.springframework:spring-context"
    compile "org.springframework:spring-core"

    testCompile "org.springframework:spring-test"
    testCompile "junit:junit"
}

Eddú Meléndez

Java Software Engineer, Open Source Contributor