305 votes

Objectif du bloc buildscript dans Gradle

Je suis nouveau à Gradle et je lis la documentation mais je ne comprends pas certaines parties. L'une de ces parties est liée à buildscript bloc. Quelle est sa fonction ?

Si votre script doit utiliser des bibliothèques externes, vous pouvez les ajouter au chemin de classe du script dans le script lui-même. Pour ce faire, vous utilisez la méthode buildscript(), en passant une closure qui déclare le classpath de build script.

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
  }
}

Ok mais quelle est la différence avec :

repositories {
  mavenCentral()
}
dependencies {
  compile group: 'commons-codec', name: 'commons-codec', version: '1.2'
}

Par exemple, pourquoi est-il nécessaire d'utiliser buildscript ?

1voto

Haomin Points 73

Je crois que tout ce qui se trouve dans la buildscript {} sera disponible pour le script de la construction actuelle lui-même et ensuite tous ses sous-projets.

Et pour les propriétés déclarées dans le fichier lui-même en dehors de la section buildscript {} il ne sera pas immédiatement disponible pour le buildscript du projet lui-même, mais pour tous ses sous-projets.

  • Ainsi, si vous souhaitez déclarer quelque chose et l'utiliser immédiatement pour le buildscript lui-même (current buildscript et pas seulement les sous-projets buildscript ), les déclarer dans le buildscript {} pour le projet en cours et a également pour effet secondaire de permettre aux sous-projets de l'utiliser ultérieurement.

  • Si vous souhaitez simplement déclarer quelque chose de manière globale (pour les sous-projets de buildscript ), vous pouvez les déclarer directement en tant que ext {} dans le projet parent. Le projet parent ne pourra pas les utiliser pour ses propres besoins. buildscript mais il sera disponible pour tous les sous-projets, qu'ils soient ou non dans le cadre du projet. buildscript clause.

Par exemple, en projet parent :

ext {
    kotlin_version_XX = '1.7.10' 
}

buildscript {
    ext {
      kotlin_version = '1.7.10' 
    }
    // kotlin_version will be available here since declared in buildscript{}
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 

    // will NOT be available here -- error due to kotlin_version_XX declared in project 
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version_XX" 
}

Et si vous avez un sous-projet :

dependencies {

    // both kotlin_version and kotlin_version_XX can be used here, since it was declared in parent project
    implementation "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    implementation "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version_XX"
}

buildscript {

    // both kotlin_version and kotlin_version_XX can even be used here for subproject's script's use, since it was already declared in parent project
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version_XX"
}

0voto

Ivan Points 394

Vous pouvez imaginer les buildScript en tant que contenu du noyau de Gradle, comme plugins{} qui est déjà intégré dans Gradle. Ainsi, tous les plugins de buildScript du parent build.gradle sera disponible dans tous les build.gradle modules.

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