Jestem nowy w Gradle i czytam dokumentację, ale nie rozumiem niektórych jej części. Jedna z tych części jest połączona z buildscript
blokiem. Jaki jest jego cel?
Jeśli skrypt kompilacji musi korzystać z bibliotek zewnętrznych, możesz dodać je do ścieżki klas skryptu w samym skrypcie kompilacji. Robisz to za pomocą metody buildscript (), przekazując zamknięcie, które deklaruje ścieżkę klasy skryptu kompilacji.
buildscript { repositories { mavenCentral() } dependencies { classpath group: 'commons-codec', name: 'commons-codec', version: '1.2' } }
Ok, ale jaka jest różnica z:
repositories {
mavenCentral()
}
dependencies {
compile group: 'commons-codec', name: 'commons-codec', version: '1.2'
}
Na przykład, dlaczego konieczne jest użycie buildscript
?
Odpowiedzi:
W
buildScript
Określa, blokowe, które wtyczki, zajęcia zadaniowe i inne zajęcia są dostępne do użytku w pozostałej części skryptu build . BezbuildScript
bloku możesz używać wszystkiego, co jest dostarczane z Gradle od razu po wyjęciu z pudełka. Jeśli chcesz dodatkowo używać wtyczek innych firm, klas zadań lub innych klas (w skrypcie kompilacji!), Musisz określić odpowiednie zależności wbuildScript
bloku.źródło
sample.infotask', name: 'infotask', version: '1.0'
I użyj zadania _uploadArchives, aby załadować ją do lokalnego repozytorium ../lib ' W innym projekcie, jeśli korzystam z mojego zadania, muszę napisać: `buildscript {repositories {maven {url' file: ../ lib '}} zależności {grupa ścieżek klasy: „sample.infotask”, nazwa: „infotask”, wersja: „1.0”}} Czy mam rację? Dlaczego musimy używać bloku buildScript ? Kiedy przesyłam artefakt lokalnie, mam słoik na moim komputerze. I po prostu muszę powiedzieć Gradle'owi, skąd i co umieścić w mojej ścieżce klasy, nic innego, co jest tutaj wyjątkowe?buildScript
bloku, ponieważ Gradle potrzebuje tych informacji, aby zrozumieć resztę skryptu kompilacji . Dlatego musisz podać te informacje w osobnym kanale (buildScript
bloku). Technicznie rzecz biorąc, Gradle potrzebuje tych informacji, aby skompilować i ocenić resztę skryptu kompilacji. To, co dzieje się pod maską, polega na tym, że Gradle dzieli skrypt kompilacji na dwa skrypty (buildScript
blok i wszystko inne), aby mógł je przetwarzać osobno.dependencies
irepositories
sekcje zawierają listę zależności wymaganych do zbudowania źródła i uruchomienia źródła itp.buildscript
Jest dlabuild.gradle
samego pliku. Tak więc zawierałoby to zależności, na przykład tworzenie RPMDockerfile
, i wszelkie inne zależności do uruchamiania zadań we wszystkich zależnychbuild.gradle
źródło
buildscript
to po prostu zależność od skryptu kompilacjiDoceniam odpowiedź Petera ... ale od razu nie było dla mnie oczywiste, co oznacza reszta skryptu kompilacji , jak podkreślono w odpowiedzi i dokumentacji.
Zwykle wprowadzanie funkcji zależnych jest przeznaczone do użycia w programie Java lub jakimkolwiek innym programie, który piszesz. Przynosząc wiosnę powiedzmy, nie należy jej używać w skrypcie kompilacji, ale w programie Java. Umieszczenie go w
buildscript
zamknięciu zapewnia dostępność zależności do użycia w samej kompilacji stopni. Nie program wyjściowy.źródło
Sekcja konfiguracji „buildscript” dotyczy samego gradla (tj. Zmian w tym, jak grad jest w stanie wykonać kompilację). Ta sekcja zazwyczaj zawiera wtyczkę Android Gradle.
źródło
To trochę wysoki poziom, ale nadzieja pomaga.
Dla mnie wyraźne rozróżnienie zaczęło się kształtować, gdy zacznę rozumieć, co jest budulcem , metodą i zadaniem. Jak wygląda składnia, jak możesz je skonfigurować itp. Sugeruję, abyś przejrzał je wszystkie. Następnie możesz zacząć rozumieć tę składnię.
Zatem bardzo ważne jest, aby wiedzieć, jaki jest typ obiektu build.gradle (instancja klasy Project), aby wiedzieć, co możesz mieć w pliku build.gradle. To by odpowiadało, skąd pochodzi ten „buildScript” i inni. Aby rozszerzyć swoje możliwości / funkcje (powiedzmy Android), zobacz, jak wtyczki mogą pomóc.
Last but not least, jest tutaj bardzo dobry samouczek , który mówi o zamknięciach, delegatach, które są pojęciami niezbędnymi do zrozumienia skryptu.
źródło
Trochę więcej wyjaśnień, pokazując plik ocen najwyższego poziomu Androida.
plik ocen na poziomie modułu
Co to jest „wtyczka”? Są to tylko klasy Java, które implementują interfejs wtyczki. Pod interfejsem ma metodę „zastosuj”, aby dodać wiele obiektów zadań o różnych nazwach. Zadanie to klasa, w której możemy zaimplementować przepływ pracy. Na przykład zadanie kompilacji składa się z procesu budowania aplikacji.
Co więc robi buildscript? Określa, gdzie znaleźć wtyczki. Do czego służy wtyczka? Obejmuje wiele zadań. Co robi zadanie? Zapewnia nam kompilację, instalację, kłaczki itp.
Moje rozumienie może być błędne. Nie wahaj się mnie poprawić, jeśli znajdziesz coś mylącego.
źródło