web-dev-qa-db-fra.com

Comment définir une variable pour la version de dépendance dans Gradle

J'essaie actuellement de migrer un projet Maven vers Gradle

Dans ma version Maven, les versions de dépendance sont toutes répertoriées comme ceci dans mon parent pom:

<properties>
    <spring.version>4.2.3.RELEASE</spring.version>
    <spring.boot.version>1.3.3.RELEASE</spring.boot.version>
    ...
</properties>

Et puis je peux définir une dépendance comme celle-ci dans n'importe lequel de mes sous-modules:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
</dependency>

J'essaie de faire la même chose sur Gradle, car certains de mes modules partagent des versions de dépendance comme celle-ci et je ne voudrais pas modifier plus d'un emplacement si je souhaite mettre à jour Spring ou effectuer une opération similaire.

Voici ce que j'ai de plus proche:

dependencies {
    ext.springVersion = '4.2.3.RELEASE'
    compile "org.springframework:spring-jdbc:$springVersion"
}

Pourtant, cela ne fonctionne toujours pas. Quelle est la méthode recommandée pour y parvenir à Gradle? Ou Gradle traite-t-il cela différemment? Peut-être que mon esprit est encore trop sur Maven pour voir une autre solution.

S'il vous plaît gardez à l'esprit que cette tentative sur Gradle n'est pas exactement ce que je veux encore. Je voudrais pouvoir définir les dépendances dans un fichier séparé , et non directement sur le fichier qui l’utilisera.

19
Rodrigo Sasaki

La manière dont vous avez fourni la version de dépendance est correcte et devrait fonctionner. IntelliJIdea a quelques problèmes avec les variables dans les scripts de construction Gradle, vous n'avez donc pas à vous en fier, essayez simplement d'exécuter votre construction et de vérifier, si la dépendance est téléchargée et si votre projet est construit correctement.

Si vous souhaitez stocker vos dépendances de projet dans un fichier séparé, l'approche la plus courante consiste à les définir dans le build.script racine, via subprojects fermeture pour tous les sous-projets ou via allprojects si vous souhaitez spécifier une dépendance pour tous vos projets. racine. Cela ressemblera à ceci:

subprojects{
    dependencies{
        compile ...
    }
}

De cette façon, vous pouvez fournir toute configuration commune pour les sous-projets dans le script de construction racine. Lire à ce sujet le guide de l'utilisateur

Vous pouvez également déclarer une variable dans le script de construction racine, l'initialiser en tant que carte avec toutes les spécifications de dépendance dont vous avez besoin ou sous forme de tableau avec une liste de dépendances uniques et utiliser cette variable dans vos sous-projets, si vous en avez besoin. Quelque chose comme ça dans la racine:

ext.commomLibs = [
  'testlibs' : 'junit:junit:4.8'
]

Notez que vous pouvez définir une valeur de la carte en tant que tableau de la spécification lib pour la faire pointer vers toutes ces dépendances. Et vous pourrez ensuite l'utiliser dans vos sous-projets en tant que:

dependencies{
    testCompile commomLibs.testlibs
}

Une autre alternative consiste à utiliser un script de construction séparé avec des dépendances et à l'appliquer au script de construction dont vous avez besoin, comme ceci.

apply from: 'dependencies.script'

Ensuite, vous pouvez placer vos dépendances dans un script de dépendances et les appliquer à n’importe quel autre script de construction, là où vous avez besoin de ces dépendances et/ou d’une logique commune.

8
Stanislav

La configuration ci-dessous dans le fichier build.gradle fonctionnait pour moi avec gradle version 4.5 et l'affiche ici pour référence future

ext {
    springVersion = '5.0.3.RELEASE'
}

dependencies {
    compile  "org.springframework:spring-context:$springVersion"
}
11
Vikas Sachdeva

Utilisez Double Quotes cela a fonctionné pour moi.

buildscript {
    ext {
        springBootVersion = '2.0.4.RELEASE'
        hazelCastVersion = '3.10.4'
    }

    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")

    }
}

dependencies {
    compile('org.springframework.cloud:spring-cloud-starter-config')
    compile "com.hazelcast:hazelcast-spring:${hazelCastVersion}"
    compile group: 'com.hazelcast', name: 'hazelcast', version: "${hazelCastVersion}" }
1
Kumar Abhishek