Mam złożony skrypt Gradle, który zawiera mnóstwo funkcji związanych z budowaniem i wdrażaniem wielu projektów netbeans w wielu środowiskach.
Skrypt działa bardzo dobrze, ale w zasadzie wszystko jest konfigurowane za pomocą pół tuzina map zawierających informacje o projekcie i środowisku.
Chcę przenieść zadania do innego pliku, aby po prostu zdefiniować mapy w prostym pliku kompilacji i zaimportować zadania z innego pliku. W ten sposób mogę używać tych samych podstawowych zadań dla wielu projektów i konfigurować te projekty za pomocą prostego zestawu map.
Czy ktoś może mi powiedzieć, jak mogę zaimportować jeden plik gradle do innego, podobnie jak zadanie Anta? Jak dotąd bezskutecznie przeszukałem dokumenty Gradle'a.
Dodatkowe informacje
Po poniższej odpowiedzi Toma, pomyślałem, że spróbuję dokładnie wyjaśnić, co mam na myśli.
Zasadniczo mam skrypt gradle, który uruchamia wiele podprojektów. Jednak wszystkie podprojekty są projektami Netbeans i mają własne skrypty budowania mrówek, więc mam zadania w gradle, aby wywołać każdy z nich.
Mój problem polega na tym, że na górze pliku mam konfigurację, taką jak:
projects = [
[name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],
[name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"]
]
Następnie generuję zadania takie jak:
projects.each({
task "checkout_$it.shortname" << {
// Code to for example check module out from cvs using config from 'it'.
}
})
Mam wiele takich fragmentów generowania zadań, a wszystkie z nich są ogólne - całkowicie zależą od konfiguracji na liście projektów.
Chcę więc umieścić to w osobnym skrypcie i zaimportować w następujący sposób:
projects = [
[name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],
[name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"]
]
import("tasks.gradle") // This will import and run the script so that all tasks are generated for the projects given above.
W tym przykładzie tasks.gradle będzie zawierał cały ogólny kod generowania zadań i zostanie uruchomiony dla projektów zdefiniowanych w głównym pliku build.gradle. W ten sposób tasks.gradle jest plikiem, który może być używany we wszystkich dużych projektach, które składają się z wielu podprojektów z plikami kompilacji Netbeans i.
apply from
natychmiast wykonuje zadania zewnętrzne. Może to nie być preferowane w logice wykonywania (tj. Chciałbym wykonywać zadania, kiedy chcę, a nie od razu).apply from
natychmiast wykonuje zadania zewnętrzne. Nie daj się zwieść. Zadania zewnętrzne są konfigurowane, a nie wykonywane.Odpowiedzi:
W wersji 0.9 jest nowa funkcja. Możesz użyć
apply from: 'other.gradle'
polecenia.Przeczytaj moje pytanie na ten sam temat pod adresem: Czy istnieje sposób na rozdzielenie / rozłożenie wspólnych części kompilacji Gradle
źródło
Odpowiedź na pytanie znalazła się w systemie Wtyczki, gdzie można dodać żądaną funkcjonalność w zestawie wtyczek, którymi mogą być pliki groovy znajdujące się w katalogu
buildSrc/src/main/groovy
. Wtyczki mogą być również dołączane jako Jar, chociaż nie próbowałem tego.Szczegóły tutaj: Niestandardowe wtyczki
źródło
Cóż, trudno jest powiedzieć, co działa najlepiej, nie widząc pliku kompilacji.
Mogę założyć, że stworzenie środowiska jako kompilacji z wieloma projektami powinno zapewnić abstrakcję, której szukasz.
W katalogu głównym projektu
build.gradle
definiujesz wszystkie elementy specyficzne dla domeny, a także te, które mają zastosowanie do wszystkich podprojektów:repositories { add(new org.apache.ivy.plugins.resolver.FileSystemResolver()) { name = 'destRepo' addIvyPattern( file( project.properties['repo.dest.dir']).absolutePath + '/[organisation]/[module]/ivys/ivy(-[revision]).xml') addArtifactPattern( file( project.properties['repo.dest.dir']).absolutePath + '/[organisation]/[module]/[type]s/[artifact](-[revision]).[ext]') descriptor = 'optional' checkmodified = true } ... } ... subprojects { sourceCompatibility = 1.5 targetCompatibility = 1.5 group = 'my.group' version = '1.0' uploadArchives { uploadDescriptor = true repositories { add rootProject.repositories.destRepo } } apply{ type my.group.gradle.api.plugins.MyPlugin } ... } dependsOnChildren()
Katalog główny projektu może również zawierać
gradle.properties
plik, w którym definiujesz właściwości używane w projektach:buildDirName=staging repo.dest.dir=/var/repo ...
Następnie w dodatkowym pliku z katalogu głównego projektu o nazwie
settings.gradle
faktycznie wskazujesz na swoje podprojekty:include 'my-first-component', 'my-second-component' ... project(':my-first-component').projectDir = new File(rootDir, 'path/to/first/component') project(':my-second-component').projectDir = new File(rootDir, 'path/to/second/component') ...
Każdy katalog podprojektu zawiera
build.gradle
plik zawierający tylko elementy specyficzne dla podprojektu.Bez względu na to, czy
gradle
wywołasz z katalogu głównego, czy podprojektu, gradle automatycznie uwzględni wszystkie definicje zapisane w różnych plikach.Zauważ również, że żadne zadanie kompilacji nie zostanie wykonane dla katalogu głównego twojego projektu, o ile nie załadujesz żadnej wtyczki poza domyślną wtyczką na poziomie głównym.
źródło