Gradle

Hace un año y unos meses, escribí Dependency Management en Gradle. En ese entonces, la última versión estable era 3.3.0 y una semana después la versión 3.4 fue liberada. A la fecha, 4.7 es la última versión liberada.

La funcionalidad BOM import, la cual explicaremos a continuación fue introducida en la versión 4.6. BOM import es un Feature Preview, es decir, podemos ir experimentando con esta funcionalidad mientras ingresa a una fase estable. Se planea como parte de la versión 5.0.

Para hacer uso de este Feature Preview debemos habilitarla en settings.gradle:

enableFeaturePreview('IMPROVED_POM_SUPPORT')

En el siguiente ejemplo, haremos uso de Project Reactor

dependencies {
    compile 'io.projectreactor:reactor-bom:Bismuth-SR8'
    compile 'io.projectreactor:reactor-core'

    testCompile 'io.projectreactor:reactor-test'
}

En el snippet anterior, podemos notar que se importa un BOM (Bill of Materials) cuyas coordenadas son las siguientes:

groupId: io.projectreactor
artifactId: reactor-bom
version: Bismuth-SR8

Es decir, la dependencia declarada será la que provea librerías con sus respectivas versiones. Las dos dependencias que se importan a continuación cuentan con groupId y artifactId solamente, ya que confian en la versión que se provee en io.projectreactor:reactor-bom:Bismuth-SR8.

Para comprobar podemos ejecutar los siguientes comandos:

./gradlew dependencies --configuration compile
compile - Dependencies for source set 'main' (deprecated, use 'implementation ' instead).
+--- io.projectreactor:reactor-bom:Bismuth-SR8
|    +--- org.reactivestreams:reactive-streams:1.0.2
|    \--- io.projectreactor:reactor-core:3.1.6.RELEASE
|         \--- org.reactivestreams:reactive-streams:1.0.2
\--- io.projectreactor:reactor-core -> 3.1.6.RELEASE (*)
./gradlew dependencies --configuration testCompile
testCompile - Dependencies for source set 'test' (deprecated, use 'testImplementation ' instead).
+--- io.projectreactor:reactor-bom:Bismuth-SR8
|    +--- org.reactivestreams:reactive-streams:1.0.2
|    +--- io.projectreactor:reactor-core:3.1.6.RELEASE
|    |    \--- org.reactivestreams:reactive-streams:1.0.2
|    \--- io.projectreactor:reactor-test:3.1.6.RELEASE
|         \--- io.projectreactor:reactor-core:3.1.6.RELEASE (*)
+--- io.projectreactor:reactor-core -> 3.1.6.RELEASE (*)
\--- io.projectreactor:reactor-test -> 3.1.6.RELEASE (*)

Eddú Meléndez

Java Software Engineer, Open Source Contributor