Quelle est la différence entre buildscript et allprojects dans build.gradle?

135

Sur une version gradle multi-projets, quelqu'un peut-il me dire quelle est exactement la différence entre la section "allprojects" et la section "buildscript"? Les deux ont une tâche repositorieset dependencies. Est-ce allprojectspour mon projet? Et quoi buildscript?

buildscript {  
     repositories {
         ...
     }
     dependencies {
         ...
     }
}

et

allprojects(subprojects) { 
     repositories {
         ...
     }
     dependencies {
         ...
     }
}
kidoher
la source

Réponses:

137

La buildscriptsection de configuration " " est pour gradle lui-même (c'est-à-dire des changements dans la façon dont gradle est capable d'effectuer la construction). Cette section inclura donc généralement le plugin Android Gradle.

La allprojectssection " " concerne les modules en cours de construction par Gradle.

Souvent, la section référentiel est la même pour les deux, puisque les deux obtiendront leurs dépendances de jcenter généralement (ou peut-être de maven central). Mais la section "dépendances" sera différente.

Habituellement, la section "dependencies" pour "allprojects" est vide puisque les dépendances pour chaque module sont uniques et seront dans le fichier "build.gradle" dans chacun des modules. Cependant, si tous les modules partageaient les mêmes dépendances, ils pourraient être répertoriés ici.

AndroidGuy
la source
Doit-on spécifier la version gradle?
IgorGanapolsky
user: 6998684 La version de gradle s'applique à l'ensemble du projet et est déclarée dans un fichier un peu caché. Regardez dans "./gradle/wrapper/gradle-wrapper.properties"
AndroidGuy
22

TL; DR: buildscriptaide à trouver des plugins, allprojectss'applique à tous les projets


https://docs.gradle.org/current/userguide/userguide_single.html#applyPluginBuildscript dit

Les plugins binaires qui ont été publiés en tant que fichiers jar externes peuvent être ajoutés à un projet en ajoutant le plugin au chemin de classe du script de construction, puis en appliquant le plugin.

Vous avez donc besoin buildscriptde gradle pour trouver les plugins, comme

Gradle à sa base fournit intentionnellement très peu pour l'automatisation du monde réel. Toutes les fonctionnalités utiles, comme la possibilité de compiler du code Java, sont ajoutées par des plugins. Les plugins ajoutent de nouvelles tâches (par exemple JavaCompile), des objets de domaine (par exemple, SourceSet), des conventions (par exemple, la source Java se trouve dans src / main / java) ainsi que l'extension des objets principaux et des objets d'autres plugins.

Concernantallprojects :

L'API du projet fournit une propriété allprojectsqui renvoie une liste avec le projet actuel et tous ses sous-projets en dessous. Si vous appelez allprojectsavec une clôture, les déclarations de clôture sont déléguées aux projets associés à allprojects.

serv-inc
la source
Pour moi, en tant que débutant dans l'écosystème Android, cela ne signifie rien. Où devons-nous placer nos dépendances? Pouvons-nous supprimer ce "buildscript"?
Martin Berger le
@MartinBerger: placez vos dépendances dans le répertoire du module build.gradle, pas dans le build.gradlerépertoire ci-dessus, sur lequel cette question traite
serv-inc