Gibt es eine Möglichkeit, gemeinsame Teile des Gradle -Builds zu teilen/zu faktorieren?

StackOverflow https://stackoverflow.com/questions/2566685

  •  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:

  1. Eine Möglichkeit, die Hauptaufbaudatei in kleinere Dateien aufzuteilen
  2. Eine Möglichkeit, einige Teile des Builds in anderen unabhängigen Builds wiederzuverwenden

Was ist der beste Weg, um das in Gradle zu erreichen?

War es hilfreich?

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 anrufen getVersionName() 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. Verwendung VERConsts['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).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top