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