web-dev-qa-db-fra.com

En gradle, comment utiliser une variable pour une version plugin?

Un de mes scripts de build importe ce plugin de nébuleuse:

plugins {
  id 'nebula.ospackage' version '3.5.0'
}

J'ai déplacé toutes mes informations de version dans un fichier séparé auquel tous les projets ont accès et je me demande quelle est la syntaxe correcte pour convertir en quelque chose comme:

plugins {
  id 'nebula.ospackage' version "$versions.nebula_gradle_ospackage_plugin"
}

Lorsque j'essaie d'exécuter ce qui précède avec "Gradle Clean Build", j'obtiens l'erreur suivante:

fichier de construction 'build.gradle': 2: la liste d'arguments doit être exactement 1 chaîne littérale non vide

Voir https://docs.gradle.org/2.7/userguide/plugins.html#sec:plugins_block pour plus d'informations sur le bloc plugins {}

@ ligne 2, colonne 33. id version 'nebula.ospackage' "$ versions.nebula_gradle_ospackage_plugin"

L'article lié montre comment je pourrais utiliser le bloc "buildscript", qui fonctionne, mais il semble qu'il doit y avoir un moyen de faire fonctionner cela sur une seule ligne?

41
crobicha

Depuis Gradle 5.6, vous pouvez déclarer vos versions de plugin dans le gradle.properties fichier, et référencez ces propriétés dans le bloc plugins.

Par exemple, le gradle.properties fichier:

springBootVersion=2.2.0.RELEASE

le bloc plugins dans build.gradle:

plugins {
    id "org.springframework.boot" version "${springBootVersion}"
}

Voir: https://github.com/gradle/gradle/issues/1697#issuecomment-506910915 .

Voir également:

  1. https://docs.gradle.org/5.6/release-notes.html#central-management-of-plugin-versions-with-settings-script
  2. https://docs.gradle.org/5.6/userguide/plugins.html#sec:plugin_management
9
zhouji

Vous ne pouvez pas utiliser de variable ici:

Où "plugin version" et "plugin id" doivent être des chaînes constantes, littérales. Aucune autre déclaration n'est autorisée; leur présence entraînera une erreur de compilation.

36
BoygeniusDexter

Il s'agit d'un ancien article, mais le bogue est toujours ouvert, et j'ai trouvé cet article à la recherche de solutions de contournement.

Il semble que vous en étiez déjà au courant et que vous en avez la réponse de BoygeniusDexter , mais je pense que cela peut aider d'autres personnes à trouver ce message comme moi. La solution de contournement suivante est basée sur le Gradle docs et a résolu le problème pour moi:

buildscript {
    ext {
        springBootVersion = '2.0.4.RELEASE'
    }
    repositories {
        jcenter()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

plugins {
    id 'Java'
    // and other plugins
    id 'io.spring.dependency-management' version '1.0.6.RELEASE'
}
// but the one with the variable version is applied the old way:
apply plugin: 'org.springframework.boot'

// We can use the variable in dependencies, too:
dependencies {
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: springBootVersion
    // ...
}
6
barfuin