Ich habe ein komplexes Gradle-Skript, das eine Vielzahl von Funktionen zum Erstellen und Bereitstellen einer Reihe von Netbeans-Projekten in einer Reihe von Umgebungen zusammenfasst.
Das Skript funktioniert sehr gut, aber im Wesentlichen wird alles über ein halbes Dutzend Karten konfiguriert, die Projekt- und Umgebungsinformationen enthalten.
Ich möchte die Aufgaben in eine andere Datei abstrahieren, damit ich meine Maps einfach in einer einfachen Build-Datei definieren und die Aufgaben aus der anderen Datei importieren kann. Auf diese Weise kann ich dieselben Kernaufgaben für eine Reihe von Projekten verwenden und diese Projekte mit einem einfachen Satz von Karten konfigurieren.
Kann mir jemand sagen, wie ich eine Gradle-Datei in eine andere importieren kann, ähnlich wie bei Ant? Ich habe Gradles Dokumente bisher ohne Erfolg durchsucht.
Zusätzliche Information
Nach Toms Antwort unten dachte ich, ich würde versuchen, genau zu klären, was ich meine.
Grundsätzlich habe ich ein Gradle-Skript, das eine Reihe von Teilprojekten ausführt. Die Teilprojekte sind jedoch alle Netbeans-Projekte und werden mit eigenen Ant-Build-Skripten geliefert, sodass ich Aufgaben in Gradle habe, um jedes dieser Projekte aufzurufen.
Mein Problem ist, dass ich oben in der Datei eine Konfiguration habe, wie zum Beispiel:
projects = [
[name:"MySubproject1", shortname: "sub1", env:"mainEnv", cvs_module="mod1"],
[name:"MySubproject2", shortname: "sub2", env:"altEnv", cvs_module="mod2"]
]
Ich generiere dann Aufgaben wie:
projects.each({
task "checkout_$it.shortname" << {
// Code to for example check module out from cvs using config from 'it'.
}
})
Ich habe viele dieser Arten von Snippets zur Aufgabengenerierung, und alle sind generisch - sie hängen vollständig von der Konfiguration in der Projektliste ab.
Ich möchte also eine Möglichkeit, dies in ein separates Skript einzufügen und auf folgende Weise zu importieren:
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.
In diesem Beispiel enthält task.gradle den gesamten generischen Code zur Aufgabengenerierung und wird für die in der Hauptdatei build.gradle definierten Projekte ausgeführt. Auf diese Weise ist task.gradle eine Datei, die von allen großen Projekten verwendet werden kann, die aus einer Reihe von Unterprojekten mit Netbeans Ant Build-Dateien bestehen.
apply from
führt die externen Aufgaben sofort aus. Dies ist in der Ausführungslogik möglicherweise nicht vorzuziehen (dh ich möchte die Aufgaben ausführen, wenn ich möchte, nicht sofort).apply from
Führt die externen Aufgaben sofort aus. Lass dich nicht irreführen. Externe Aufgaben werden konfiguriert und nicht ausgeführt.Antworten:
In 0.9 gibt es eine neue Funktion. Sie können den
apply from: 'other.gradle'
Befehl verwenden.Lesen Sie meine Frage zu derselben Sache unter: Gibt es eine Möglichkeit, gemeinsame Teile des Gradle-Builds aufzuteilen / herauszufiltern?
quelle
Die Antwort auf die Frage stellte sich im Plugins-System heraus, wo Sie die gewünschte Funktionalität in einer Reihe von Plugins hinzufügen können, bei denen es sich um groovige Dateien im Verzeichnis handeln kann
buildSrc/src/main/groovy
. Plugins können auch als Jar gebündelt werden, obwohl ich dies nicht ausprobiert habe.Details hier: Benutzerdefinierte Plugins
quelle
Nun, es ist schwer zu sagen, was Ihnen am besten dient, ohne Ihre Build-Datei tatsächlich zu sehen.
Ich könnte davon ausgehen, dass das Einrichten Ihrer Umgebung als Multiprojekt-Build Ihnen die Abstraktion bietet, nach der Sie suchen.
In Ihrem Projektstamm
build.gradle
definieren Sie alle Ihre domänenspezifischen Dinge sowie die Dinge, die für alle Ihre Teilprojekte gelten:Das Projektstammverzeichnis enthält möglicherweise auch eine
gradle.properties
Datei, in der Sie die von Ihren Projekten verwendeten Eigenschaften definieren:Dann
settings.gradle
verweisen Sie in einer zusätzlichen Datei aus Ihrem Projektstamm mit dem Namen tatsächlich auf Ihre Teilprojekte:Jedes Unterprojektverzeichnis enthält eine
build.gradle
Datei, die nur die unterprojektspezifischen Inhalte enthält.gradle
Unabhängig davon, ob Sie von Ihrem Projektstamm- oder Unterprojektverzeichnis aus aufrufen , berücksichtigt gradle automatisch alle Ihre Definitionen, die in den verschiedenen Dateien vorgenommen wurden.Beachten Sie auch, dass keine Kompilierungsaufgabe für Ihr Projektstammverzeichnis ausgeführt wird, solange Sie kein Plugin über das Standard-Plugin auf Stammebene hinaus laden.
quelle