web-dev-qa-db-fra.com

Utilisation de variables dans le script de construction Gradle

J'utilise Gradle dans mon projet. J'ai une tâche pour faire une configuration supplémentaire avec ma guerre. J'ai besoin de construire une chaîne à utiliser dans ma tâche, disons que j'ai:

task extraStuff{
    doStuff 'org.springframework:spring-web:3.0.6.RELEASE@war'
}

Cela fonctionne bien. Ce que je dois faire, c'est définir la version (en fait déjà définie dans le fichier de propriétés) et l'utiliser dans la tâche comme:

springVersion=3.0.6.RELEASE

task extraStuff{
    doStuff 'org.springframework:spring-web:${springVersion}@war'
}

Mon problème est que la version printemps n'est pas reconnue comme variable. Alors, comment puis-je le passer à l'intérieur de la chaîne?

22
huzeyfe

Je pense que le problème peut se poser sur les délimiteurs littéraux de chaîne:

  1. Les littéraux de chaîne sont définis exactement comme dans groovy, donc mettez-les entre guillemets simples ou doubles (par exemple "3.0.6.RELEASE");
  2. Gstrings ne sont pas analysés dans des chaînes de guillemets simples (les deux '...' ou triple '''...''' ones) si je me souviens bien;

Le code sera donc:

springVersion = '3.0.6.RELEASE' //or with double quotes "..."

task extraStuff{
    doStuff "org.springframework:spring-web:${springVersion}@war"
}
26
Giuseppe Ricupero

Si vous développez une application Android en utilisant Gradle, pour déclarer une variable (c'est-à-dire contenant une version de dépendances), vous devez utiliser le mot clé def comme ci-dessous:

def dependsVersion = '1.2'

dependencies {
    compile "groupId:artifactId:${dependsVersion}"
}

J'espère que cela a aidé!

28
hzitoun

Sur Android il y a en fait 2 possibilités pour y parvenir. Cela dépend vraiment de ce qui convient à vos besoins. Ces deux possibilités ont leurs avantages et leurs inconvénients. Vous pouvez utiliser def variable ou ext{} bloquer. La variable def est géniale car elle vous permet de cliquer sur la variable et pointe exactement où elle est définie dans le fichier par rapport à ext{} bloc qui ne pointe PAS vers cette variable exacte. D'autre part ext{} a un bon avantage: vous pouvez référencer des variables à partir de project_name/build.gradle à project_name/app/build.gradle ce qui dans certains cas est très utile MAIS comme je l'ai dit si vous cliquez sur cette variable permet de ne dire que dans un seul fichier il ne pointe pas vers la définition de cette variable qui est très mauvaise car cela vous prend plus de temps de recherche si votre dépendance la liste s'allonge.

1) option def qui est probablement la meilleure et vous fait gagner du temps de recherche.

def lifecycle = '2.0.0'

dependencies {
    implementation 'androidx.lifecycle:lifecycle-extensions:$lifecycle'
}

2) deuxième bloc ext {}. C'est un peu correct si la liste des dépendances n'est pas énorme.

ext {
    lifecycle = '1.1.1'
}

dependencies {
    implementation 'androidx.lifecycle:lifecycle-extensions:$lifecycle'
}

) Dans certains cas, si vous souhaitez partager des variables entreproject_name/build.gradleetproject_name/app/build.gradletilisez ext {}

dans nom_projet/build.gradle vous définissez kotlin_shared_variable:

buildscript {
    ext.kotlin_shared_variable = '1.3.41'

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_shared_variable"
    }
}

que vous pouvez utiliser dans nom_projet/app/build.gradle

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_shared_variable"
}

et bien sûr, vous pouvez les combiner.

0
Kebab Krabby