Gradle task nicht ausgeführt automatisch
Ich bin mir der Definition einer Aufgabe in gradle:
task releaseCandidate(type: Exec) {
commandLine 'git', 'checkout', 'develop'
//Increment version code in Manifest
String manifest = new File('AndroidManifest.xml').getText('UTF-8')
Pattern pattern = Pattern.compile('android:versionCode="([0-9]+)"')
Matcher matcher = pattern.matcher(manifest)
matcher.find()
int newVersionCode = Integer.parseInt(matcher.group(1)) + 1
manifest = manifest.replaceAll(
"android:versionCode=\"([0-9]+)\"", "android:versionCode=\"$newVersionCode\""
)
new File('AndroidManifest.xml').write(manifest, 'UTF-8')
commandLine 'git', 'diff'
}
Denen will ich erst ausführen, wenn ich explizit nennen, wie gradle releaseCandidate
. Allerdings, wenn ich ausführen einer anderen Aufgabe, wie gradle assembleDebug
, es läuft auch Aufgabe releaseCandidate. Ich will nicht, dass Verhalten geschehen. Es gibt keine Aufgabe, die je nach releaseCandidate oder vice-versa.
Mein Projekt ist eine Android app, also ich bin mit android
gradle-plugin.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein häufiges Problem. Hinzufügen einer Aktion zu der Aufgabe sonst-code ausgeführt wird bei der Konfiguration phase. Beispiel-Aufgabe mit der Aktion:
Wie ich das sehe, würden Sie eher benötigen, schreiben Sie eine benutzerdefinierte Aufgabe, als mit
Exec
geben. Ich nehme an, es ist nicht gültig zu definierencommandLine
zweimal.BEARBEITEN
Lesen Sie diese veröffentlichen, um die Allgemeine Idee, wie es funktioniert.
<<
Verknüpfung, aber die docs nicht machen, dass das Verhalten über die Konfiguration der phase klar.Mischen Sie die Aufgabe Konfiguration und groovy-code. Alles das ist Teil der Hauptteil einer Aufgabe, die definition erfolgt in der Konfigurationsphase. Die
task task1 << { code }
ist eine Kurzform fürcommandLine
ist Teil der Exec-Aufgabe aber dein anderer code ist nicht und sollte gewickelt werden in einedoLast
dies führt die Kommandozeile zuerst und führen Sie dann Ihren zusätzlichen code. Wenn Sie benötigen ein anderes execcommandLine
dann müssen Sie eine andere Aufgabe.Nur komplett @Opal Antwort für die Fälle, wenn Exec wirklich genutzt wird (zum Beispiel CommandLine Referenz) :