119 votes

Dans Gradle, comment déclarer les dépendances communes en un seul endroit ?

Dans Maven, il y a une fonctionnalité très utile qui permet de définir une dépendance dans la balise <dependencyManagement> du POM parent, et faire référence à cette dépendance à partir des modules enfants sans spécifier la version, la portée ou autre.

Quelles sont les alternatives dans Gradle ?

1voto

Dhaval Jivani Points 1295

Vous pouvez centraliser une dépendance en utilisant le code ci-dessous :

En gradle.properties

COMPILE_SDK_VERSION=26
BUILD_TOOLS_VERSION=26.0.1
TARGET_SDK_VERSION=26
MIN_SDK_VERSION=14

ANDROID_SUPPORT_VERSION=26.0.2

Dans chaque module, ajoutez à build.gradle :

android {
    compileSdkVersion COMPILE_SDK_VERSION as int
    buildToolsVersion BUILD_TOOLS_VERSION as String

    defaultConfig {
        minSdkVersion MIN_SDK_VERSION as int
        targetSdkVersion TARGET_SDK_VERSION as int
        versionCode 1
        versionName "1.0"

    }

}

dependencies {
 compile "com.android.support:appcompat-v7:${ANDROID_SUPPORT_VERSION}"
 compile "com.android.support:support-v4:${ANDROID_SUPPORT_VERSION}"
 compile "com.android.support:support-annotations:${ANDROID_SUPPORT_VERSION}"
 compile "com.android.support:support-vector-drawable:${ANDROID_SUPPORT_VERSION}"
 compile "com.android.support:design:${ANDROID_SUPPORT_VERSION}"
}

1voto

tkruse Points 3903

Cet article de blog suggère de gérer les dépendances et les groupes en tant que configurations : https://www.javacodegeeks.com/2016/05/manage-dependencies-gradle-multi-project-build.html

Je ne l'ai pas essayé moi-même, mais il semble intéressant.

Projet racine build.gradle

subprojects {
  configurations {
    commonsIo
  }

  dependencies {
    commonsIo 'commons-io:commons-io:2.5'
  }
}

Sous-projet build.gradle

configurations {
  compile.extendsFrom commonsIo
}

1voto

datta Points 471

À partir de gradle 7.1.1, vous pouvez utiliser le catalogue de versions.

https://docs.gradle.org/current/userguide/platforms.html

https://melix.github.io/blog/2021/03/version-catalogs.html

0voto

Suraj Vaishnav Points 1445

Pour garder votre fichier gradle propre, nous pouvons regrouper les dépendances dans un tableau et les implémenter plus tard.

  1. Ajouter une version des bibliothèques comme celle-ci dans build.gradle (niveau application) en dehors du bloc de dépendances :

// déclarer les versions de la bibliothèque

final RetrofitVersion = '2.3.0'
final OkHttpVersion = '3.9.1'
  1. Créez un tableau de dépendances connexes, afin de pouvoir les retrouver facilement par la suite. Ajoutez-le dans build.gradle (niveau application) en dehors du bloc de dépendances :

// Utiliser la version dans la bibliothèque et ajouter la dépendance avec l'accès nom(comme retrofit(premier))

final networkDependencies = [
        retrofit             : "com.squareup.retrofit2:retrofit:${RetrofitVersion}",
        retrofitGsonConverter: "com.squareup.retrofit2:converter-gson:${RetrofitVersion}",
        retrofitRxJavaAdapter: "com.squareup.retrofit2:adapter-rxjava2:${RetrofitVersion}",
        okHttp3              : "com.squareup.okhttp3:okhttp:${OkHttpVersion}",
        okHttp3Logging       : "com.squareup.okhttp3:logging-interceptor:${OkHttpVersion}"
]
  1. Et dans bloc de dépendance :

// Implémente toutes les dépendances du tableau

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation networkDependencies.values()
}

Ainsi, le code final ressemblera à ceci :

final RetrofitVersion = '2.3.0'
final OkHttpVersion = '3.9.1'

final networkDependencies = [
        retrofit             : "com.squareup.retrofit2:retrofit:${RetrofitVersion}",
        retrofitGsonConverter: "com.squareup.retrofit2:converter-gson:${RetrofitVersion}",
        retrofitRxJavaAdapter: "com.squareup.retrofit2:adapter-rxjava2:${RetrofitVersion}",
        okHttp3              : "com.squareup.okhttp3:okhttp:${OkHttpVersion}",
        okHttp3Logging       : "com.squareup.okhttp3:logging-interceptor:${OkHttpVersion}"
]

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation networkDependencies.values()
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X