Qual è la differenza tra buildscript e tutti i progetti in build.gradle?


135

In una build con progetti multipli, qualcuno può dirmi qual è esattamente la differenza tra la sezione "tutti i progetti" e quella "buildscript"? Entrambi hanno un repositoriese dependenciescompito. È allprojectsper il mio progetto? Che dire buildscript?

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

e

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

Risposte:


137

La buildscriptsezione di configurazione " " è per il gradle stesso (ovvero cambia il modo in cui gradle è in grado di eseguire la build). Quindi questa sezione di solito includerà il plug-in Android Gradle.

La allprojectssezione " " è per i moduli che saranno costruiti da Gradle.

Spesso la sezione del repository è la stessa per entrambi, poiché entrambi otterranno le loro dipendenze da jcenter solitamente (o forse da centrale). Ma la sezione "dipendenze" sarà diversa.

Di solito la sezione "dipendenze" per "tutti i progetti" è vuota poiché le dipendenze per ciascun modulo sono uniche e si troveranno nel file "build.gradle" all'interno di ciascuno dei moduli. Tuttavia, se tutti i moduli condividessero le stesse dipendenze, potrebbero essere elencati qui.


Dobbiamo specificare la versione gradle?
IgorGanapolsky

utente: 6998684 La versione di gradle si applica all'intero progetto ed è dichiarata in un file un po 'nascosto. Cerca in "./gradle/wrapper/gradle-wrapper.properties"
Android Acquista

22

TL; DR: buildscriptaiuta a trovare plugin, si allprojectsapplica a tutti i progetti


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

Plugin binari che sono stati pubblicati come file jar esterni possono essere aggiunti a un progetto aggiungendo il plug-in al percorso di classe dello script di build e quindi applicando il plug-in.

Quindi è necessario buildscriptche Gradle trovi i plugin, come

Gradle al suo interno offre intenzionalmente molto poco per l'automazione del mondo reale. Tutte le funzionalità utili, come la possibilità di compilare il codice Java, vengono aggiunte dai plugin. I plug-in aggiungono nuove attività (ad es. JavaCompile), oggetti di dominio (ad es. SourceSet), convenzioni (ad es. L'origine Java si trova in src / main / java), nonché l'estensione di oggetti core e oggetti da altri plug-in.

Per quanto riguardaallprojects :

L'API di progetto fornisce una proprietà allprojectsche restituisce un elenco con il progetto corrente e tutti i suoi sottoprogetti sottostanti. Se si chiama allprojectscon una chiusura, le dichiarazioni della chiusura vengono delegate ai progetti associati allprojects.


Per me, come principiante nell'ecosistema Android, questo non significa nulla. Dove dobbiamo mettere le nostre dipendenze? Possiamo cancellare quel "buildscript"?
Martin Berger,

@MartinBerger: metti le tue dipendenze nel modulo build.gradle, non quella build.gradleche è una directory sopra, di cui tratta questa domanda
serv-inc
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.