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

Sur une version de projet multi-projet, quelqu’un peut-il me dire quelle est exactement la différence entre la section “allprojects” et celle de “buildscript”? Tous deux ont une tâche de repositories et de dependencies . Est-ce que tous les allprojects pour mon projet? Qu’en est-il du buildscript de buildscript ?

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

et

 allprojects(subprojects) { repositories { ... } dependencies { ... } } 

La section de configuration ” buildscript ” est destinée à la gradation elle-même (c.-à-d. À la façon dont gradle est capable d’effectuer la construction). Donc, cette section inclura généralement le plugin Android Gradle.

La section ” allprojects ” concerne les modules construits par Gradle.

Souvent, la section du référentiel est la même pour les deux, car les deux dépendront généralement de jcenter (ou peut-être de Maven Central). Mais la section “dépendances” sera différente.

Habituellement, la section “dépendances” pour “tous les projets” est vide car 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 listés ici.

TL; DR: buildscript aide à trouver des plugins, tous les projets s’appliquent à tous les projets


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

Les plug-ins binarys publiés en tant que fichiers JAR externes peuvent être ajoutés à un projet en ajoutant le plug-in au classpath du script de génération, puis en appliquant le plug-in.

Donc, vous avez besoin de buildscript pour 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 comstackr du code Java, sont ajoutées par des plug-ins. Les plugins ajoutent de nouvelles tâches (par exemple, JavaComstack), des objects de domaine (par exemple, SourceSet), des conventions (par exemple, le source Java est situé dans src / main / java).

Concernant tous les allprojects :

L’API de projet fournit une propriété allprojects qui renvoie une liste avec le projet en cours et tous ses sous-projets en dessous. Si vous appelez tous les allprojects avec une fermeture, les instructions de la fermeture sont déléguées aux projets associés à tous les projets.