Wie kann ich einen Gradle-Build stoppen, nachdem ich ein Problem festgestellt habe? Ich kann eine Zusicherung verwenden, eine Ausnahme auslösen, eine System.exit ausführen (schlechte Idee) oder eine dedizierte Funktion in Gradle verwenden (aber ich konnte keine finden). Was ist der beste Weg für Gradle (und warum?).
162
require(something != whatever) { "No good!" }
im Gegensatz zu der ausführlicheren undif(something != whatever){ throw new GradleException("No good!") }
GradleScriptException
ist, dass es einen zweiten Parameter für eine Ursache benötigt.make
dassrules
(Aufgaben) erfolgreich waren oder fehlgeschlagen sind. Ich habe es einmal versuchtreturn false
- Gradle ignorierte es einfach und rannte weiter.Wenn Sie den Build stoppen möchten, werfen Sie:
oder werfen Sie die Unterklassen für die obige Ausnahme. Einige der Unterklassenausnahmen schlagen tatsächlich nur die aktuelle Aufgabe fehl, fahren jedoch mit dem Build fort.
quelle
Derzeit gibt es keine dedizierte Methode, obwohl diskutiert wurde, eine hinzuzufügen.
Die empfohlene Methode zum Stoppen eines Gradle-Builds besteht darin, eine Ausnahme auszulösen. Da Groovy keine Ausnahmen aktiviert hat und Gradle standardmäßig den Ausnahmetyp nicht druckt, ist es nicht so kritisch, welche Ausnahme ausgelöst wird. In Build-Skripten wird häufig GradleException verwendet, aber eine Groovy-Behauptung erscheint auch vernünftig (abhängig von den Umständen und der Zielgruppe). Wichtig ist eine klare Botschaft. Das Hinzufügen einer Ursache (falls verfügbar) hilft beim Debuggen (
--stacktrace
).Gradle bietet dedizierte Ausnahmetypen
StopExecutionException
/StopActionException
zum Stoppen der aktuellen Aufgabe / Aufgabenaktion, aber zum Fortfahren des Builds.quelle
Eine andere Option, wenn Sie nicht möchten, die Ausnahme später abfangen zu können, ist das Aufrufen der Ant-Fail-Task. Meiner Meinung nach ist es etwas einfacher zu lesen und Sie können dem Benutzer eine nette Nachricht geben, ohne --stacktrace zu verwenden.
Gibt Ihnen eine Nachricht wie:
Wahrscheinlich können Sie dies abfangen (vielleicht löst es die BuildException von ant aus?), Aber wenn dies ein Ziel ist, würde ich ant.fail nicht verwenden. Ich würde es einfach machen, zu sehen, welche Ausnahme zu fangen ist, indem ich eine Standard-Gradle-Ausnahme auslöse, wie von tim_yates vorgeschlagen.
quelle
throw new GradleException("The sky is falling!!")
(Gradle 3.4.1)Durch das Auslösen einer einfachen GradleException wird das Build-Skript gestoppt. Dies eignet sich hervorragend zum Überprüfen der erforderlichen Umgebungseinstellungen.
Beispiel:
quelle
Hier ist ein Codefragment, das versucht zu emulieren, wie die Gradle-Javac-Task Fehler auslöst:
Wenn der Befehl zurückkehrt
0
wird, erfolgt keine Ausgabe. Jeder andere Wert gibt den Standardausgang aus und stoppt den Build.HINWEIS: Wenn Ihr Befehl auch in errorOutput schreibt, müssen Sie dies möglicherweise in das Fehlerprotokoll aufnehmen.
quelle