Gibt es eine Möglichkeit, gemeinsame Teile des Gradle -Builds zu teilen/zu faktorieren?
-
24-09-2019 - |
Frage
Wir haben mehrere unabhängige Builds (jeder unabhängige Build ist ein Multi-Project-Build). Die wichtigsten Build -Skripte werden ziemlich groß, da wir eine Reihe gemeinsamer Aufgaben haben, die von Unterprojekten wiederverwendet werden, und es gibt viel Ruf zwischen unabhängigen Builds. Was wir suchen, ist:
- Eine Möglichkeit, die Hauptaufbaudatei in kleinere Dateien aufzuteilen
- Eine Möglichkeit, einige Teile des Builds in anderen unabhängigen Builds wiederzuverwenden
Was ist der beste Weg, um das in Gradle zu erreichen?
Lösung
Mit Gradle 0.9 können Sie ein Build -Skript aus einem anderen Build -Skript importieren. Schauen Sie sich an: Konfigurieren des Projekts mithilfe eines externen Build -Skripts. Grundsätzlich ist es apply from: 'other.gradle'
.
Eine Sache, die der Benutzerhandbuch nicht erwähnt, ist, dass der Parameter 'From' eine URL sein kann, sodass Sie Ihre gemeinsam genutzten Skripte über HTTP irgendwo (z. B. Ihr Subversion -Repository) verfügbar machen und sie aus mehreren Builds importieren können.
Andere Tipps
Die Lösung, die ich gefunden habe, impliziert das Zuordnen der Dinge, die Sie in Ihrem haben other.gradle
Datei.
def getVersionName = { ->
def stdout = new ByteArrayOutputStream()
exec {
commandLine 'git', 'describe', '--tags'
standardOutput = stdout
}
return stdout.toString().trim()
}
ext{
VERConsts = [:]
VERConsts['NAME'] = getVersionName()
VERConsts['NAME_CALL'] = getVersionName
}
Dann in deinem build.gradle
Datei:
apply from: 'other.gradle'
// ...
android {
defaultConfig {
versionName VERConsts['NAME_CALL']()
// or
versionName VERConsts['NAME']
}
}
Dann ist die versionName
wird das Anrufergebnis haben.
Anmerkungen:
VERConsts['NAME'] = getVersionName()
werde anrufengetVersionName()
und speichern sein Ergebnis. Verwenden Sie es in Ihrem Skript, z.versionName VERConsts['NAME']
Weisen Sie dann den gespeicherten Wert zu.VERConsts['NAME_CALL']
speichert stattdessen einen Verweis auf die Funktion. VerwendungVERConsts['NAME_CALL']()
Rufen Sie in Ihrem Skript tatsächlich die Funktion auf und weisen das Ergebnis Ihrer Variablen zu
Ersteres führt dazu, dass der gleiche Wert über das Skript zugewiesen wird, während letztere zu unterschiedlichen Werten führen kann (z. B. wenn jemand eine andere Version drückt, während Ihr Skript ausgeführt wird).