Jaka jest różnica między buildscript a allprojects w build.gradle?

140

Czy ktoś może mi powiedzieć, jaka jest różnica między sekcją „allprojects” a sekcją „buildscript” w przypadku kompilacji gradle obejmującej wiele projektów? Obaj mają repositoriesi dependencieszadanie. Jest allprojectsdla mojego projektu? O co chodzi buildscript?

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

i

allprojects(subprojects) { 
     repositories {
         ...
     }
     dependencies {
         ...
     }
}
kidoher
źródło

Odpowiedzi:

144

Sekcja buildscriptkonfiguracji " " dotyczy samego programu Gradle (tj. Zmian w sposobie budowania programu przez Gradle). Więc ta sekcja będzie zwykle zawierać wtyczkę Android Gradle.

Sekcja „ allprojects” dotyczy modułów budowanych przez Gradle.

Często sekcja repozytorium jest taka sama dla obu, ponieważ oba będą zwykle pobierać swoje zależności z jcenter (lub może z maven central). Ale sekcja „zależności” będzie inna.

Zwykle sekcja „zależności” dla „wszystkich projektów” jest pusta, ponieważ zależności dla każdego modułu są unikalne i będą znajdować się w pliku „build.gradle” w każdym z modułów. Jeśli jednak wszystkie moduły współużytkują te same zależności, można je tutaj wymienić.

AndroidGuy
źródło
Czy musimy określić wersję gradle?
IgorGanapolsky
użytkownik: 6998684 Wersja gradle dotyczy całego projektu i jest zadeklarowana w pliku, który jest nieco ukryty. Spójrz w "./gradle/wrapper/gradle-wrapper.properties"
AndroidGuy
22

TL; DR: buildscriptpomaga znaleźć wtyczki, allprojectsdotyczy wszystkich projektów


https://docs.gradle.org/current/userguide/userguide_single.html#applyPluginBuildscript mówi

Wtyczki binarne, które zostały opublikowane jako zewnętrzne pliki jar, można dodać do projektu, dodając wtyczkę do ścieżki klas skryptu budowania, a następnie stosując wtyczkę.

Potrzebujesz więc buildscriptgradle, aby znaleźć wtyczki, as

Gradle w swej istocie celowo zapewnia bardzo niewiele dla automatyzacji w świecie rzeczywistym. Wszystkie przydatne funkcje, takie jak możliwość kompilacji kodu Java, są dodawane przez wtyczki. Wtyczki dodają nowe zadania (np. JavaCompile), obiekty domeny (np. SourceSet), konwencje (np. Źródło Javy znajduje się w src / main / java), a także rozszerza podstawowe obiekty i obiekty z innych wtyczek.

Dotyczyallprojects :

Interfejs API projektu udostępnia właściwość, allprojectsktóra zwraca listę z bieżącym projektem i wszystkimi jego podprojektami pod nim. Jeśli zadzwonisz allprojectsz zamknięciem, oświadczenia o zamknięciu są delegowane do projektów powiązanych z allprojects.

serv-inc
źródło
1
Dla mnie, jako początkującego w ekosystemie Androida, to nic nie znaczy. Gdzie musimy umieścić nasze zależności? Czy możemy usunąć ten „buildscript”?
Martin Berger
@MartinBerger: umieść swoje zależności w katalogu modułu build.gradle, a nie build.gradleto jest jeden powyżej, którego dotyczy to pytanie
serv-inc