Translate

miércoles, 27 de noviembre de 2013

Gradle: configurar las dependencias transitivas de tu build.gradle

Title: Configure your transitive dependencies from your build.gradle

Del mismo modo que hicimos en su momento con un proyecto maven para eliminar sus dependencias transitivas. Ahora haremos lo mismo con un proyecto Gradle pero además aprenderemos a manejarlas un poco más en profundidad.

Nos basaremos en un proyecto Web con Spring Framework de modo que nuestro proyecto utilice el repositorio de Maven y recupere dependencias de Spring Framework.

Para ello en nuestro build.gradle del proyecto ponemos lo siguiente:

build.gradle
--
apply plugin: 'java'
apply plugin: 'war'

sourceCompatibility = 1.5
version = '1.0.0'
jar {
    manifest {
    attributes 'Implementation-Title': 'mySpringWebProject', 'Implementation-Version': version
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile ('org.springframework:spring-webmvc:3.2.5.RELEASE')
}

--
Con esto conseguimos que se importen todas las librerías que el proyecto web necesita y incluyendo las dependencias transitivas de las que depende nuestra librería spring-webmvc.





Si no queremos que todas las dependencias transitivas de las librerías que utilizamos se descarguen haremos lo siguiente:

Modo 1:


--
.....
......
dependencies {
     compile ('org.springframework:spring-webmvc:3.2.5.RELEASE'){transitive=false}
    
}
.....
.....
--

Modo 2:

--
....
....
dependencies {
    compile module ('org.springframework:spring-webmvc:3.2.5.RELEASE')
}
....
....
--
Con estas opciones obtenemos sólo la importación de la librería seleccionada.


La flexibilidad de Gradle nos da la posibilidad de seleccionar que dependencias transitivas queremos que se descarguen o no.

--
...
...
dependencies {
    compile module ('org.springframework:spring-webmvc:3.2.5.RELEASE'){
      dependency 'org.springframework:spring-beans:3.2.5.RELEASE'
    }

....
....
--

Pero tenemos que tener en cuenta que las dependencias transitivas de la propia dependencias también se intentarán descargar. Por lo tanto todo lo que dependa de  spring-beans también se descargará.

El resultado es el siguiente:


Ya que spring-core es dependencia spring-beans al igual que commons-logging

Para que sólo se descargara spring-beans tenemos que poner lo siguiente.

Modo 1:

--
...
...
dependencies {
    compile module ('org.springframework:spring-webmvc:3.2.5.RELEASE'){
      dependency ('org.springframework:spring-beans:3.2.5.RELEASE'){
           transitive=false
      }
    }
}

....
....

--
Modo 2:

--

...
...

dependencies {
    compile module ('org.springframework:spring-webmvc:3.2.5.RELEASE'){
      dependency module('org.springframework:spring-beans:3.2.5.RELEASE')    }
}
....
....
--

De esta manera conseguimos el resultado deseado


Si queremos descargar varias, dependencias, por ejemplo spring-beans y spring-core, haremos los siguiente

--

...
...
dependencies {
    compile module ('org.springframework:spring-webmvc:3.2.5.RELEASE'){
      dependencies module('org.springframework:spring-beans:3.2.5.RELEASE'), 
                   module('org.springframework:spring-core:3.2.5.RELEASE')   
      
      }
}

....
....
--
De este modo obtenemos:



Espero que con todos estos ejemplos te hayan servido para aprender a configurar tus dependencias en tu proyecto Gradle.

Se agradecen comentarios, críticas y recomendaciones.

Referencias:
Grade Dependency Management Bascis
Gradle Dependency Managemet