Comment puis-je arrêter une compilation Gradle après avoir détecté un problème? Je peux utiliser une assert, lancer une exception, faire un System.exit (mauvaise idée) ou utiliser une fonction dédiée dans Gradle (mais je n'ai pas pu en trouver). Quelle est la meilleure façon pour Gradle (et pourquoi?).
162
require(something != whatever) { "No good!" }
par opposition à la syntaxe plus verbeuse et type-eeif(something != whatever){ throw new GradleException("No good!") }
GradleScriptException
c'est qu'il nécessite un deuxième paramètre pour une cause.make
est querules
(tâche s) réussi ou échoué. J'ai essayé une foisreturn false
- Gradle l'a simplement ignoré et a continué à courir.Si vous souhaitez arrêter la compilation, lancez:
ou lancez les sous-classes pour l'exception ci-dessus. Certaines des exceptions de sous-classe échouent en fait uniquement la tâche en cours, mais continuent avec la génération.
la source
Il n'y a actuellement pas de méthode dédiée, bien qu'il y ait eu des discussions pour en ajouter une.
La méthode recommandée pour arrêter une génération Gradle est de lever une exception. Puisque Groovy n'a pas vérifié les exceptions et que Gradle par défaut n'imprime pas le type d'exception, ce n'est pas si critique quelle exception est levée. Dans les scripts de construction, GradleException est souvent utilisé, mais une assertion Groovy semble également raisonnable (selon les circonstances et le public). L'important est de fournir un message clair. L'ajout d'une cause (si disponible) aide au débogage (
--stacktrace
).Gradle fournit des types d'exception dédiés
StopExecutionException
/StopActionException
pour arrêter la tâche / action de tâche en cours mais continuer la construction.la source
Une autre option si vous ne souhaitez pas pouvoir attraper l'exception plus tard est d'appeler la tâche ant fail. C'est un peu plus facile à lire à mon avis et vous pouvez donner un beau message à l'utilisateur sans utiliser --stacktrace.
Vous donne un message comme:
Vous pouvez probablement attraper cela (peut-être que cela lance l'exception BuildException de fourmi?) Mais si c'est un objectif, je n'utiliserais pas ant.fail. Je rendrais juste facile de voir quelle exception attraper en lançant une exception gradle standard comme tim_yates l'a suggéré.
la source
throw new GradleException("The sky is falling!!")
(Gradle 3.4.1)Lancer une simple GradleException permet d'arrêter le script de construction. Cela fonctionne très bien pour vérifier la configuration de l'environnement requise.
Exemple:
la source
Voici un fragment de code qui tente d'émuler la manière dont la tâche javac Gradle génère des erreurs:
Lorsque la commande revient,
0
il n'y a pas de sortie. Toute autre valeur imprimera le standardOutput et arrêtera la génération.REMARQUE: si votre commande écrit également dans errorOutput, vous devrez peut-être l'inclure dans le journal des erreurs.
la source