157 votes

Méthode recommandée pour arrêter une construction avec Gradle

Comment puis-je arrêter une version suite à un problème avec ma version dans Gradle? 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 une). Quel est le meilleur moyen pour Gradle (et pourquoi?).

114voto

tim_yates Points 63521

J'ai l'habitude de jeter l'exception de l' org.gradle.api package, par exemple InvalidUserDataException lorsque quelqu'un est entré dans quelque chose de pas valide, ou GradleScriptException pour plus d'erreurs générales.

Si vous souhaitez arrêter la tâche en cours ou de l'action, et de passer à la suivante, vous pouvez également jeter un StopActionException

80voto

skipy Points 684

si vous voulez arrêter le build build

 throw new GradleException('error occurred')
 

ou jeter les sous-classes pour l'exception ci-dessus. certaines des exceptions de sous-classes échouent uniquement à la tâche en cours mais poursuivent la construction.

26voto

Peter Niederwieser Points 36369

Il n'existe actuellement aucune méthode spécifique, bien qu'il y ait eu des discussions pour en ajouter une.

La méthode recommandée pour arrêter un build Gradle est de lancer une exception. Depuis Groovy n'a pas vérifié les exceptions, et Gradle par défaut n'imprime pas le type d'exception, ce n'est pas que critique dont exception est levée. Dans les scripts de compilation, GradleException est souvent utilisé, mais Groovy affirmation semble également raisonnable (en fonction des circonstances et de l'auditoire). Ce qui est important est de fournir un message clair. L'ajout d'une cause (si disponible) aide pour le débogage (--stacktrace).

Gradle offre dédiée de types d'exceptions StopExecutionException/StopActionException pour l'arrêt de la tâche en cours/action de tâche, mais la poursuite de l'accumulation.

17voto

Gus Points 2561

Une autre option, si vous n'avez pas du tout envie d'être capable d'attraper l'exception plus tard, est d'appeler la fourmi échec de la tâche. C'est un peu plus facile à lire, à mon avis, et vous pouvez donner un joli message à l'utilisateur, sans l'utilisation de --stacktrace.

task (tarball, dependsOn: warAdmin) << {
    ant.fail('The sky is falling!!')
}

Vous donne un message du genre:

* What went wrong:
Execution failed for task ':tarball'.
> The sky is falling!!

Probablement vous pouvez attraper cette (peut-être qu'il jette de la fourmi BuildException?) mais si c'est un but alors je ne voudrais pas utiliser ant.un échec. Je venais de faire, il est facile de voir ce que l'exception de l'attraper en jetant standard gradle exception comme tim_yates suggéré.

11voto

edvox1138 Points 21

Lancer une simple GradleException fonctionne en arrêtant le script de construction. Cela fonctionne très bien pour vérifier la configuration requise de l'environnement.

 GradleException('your message, why the script is stopped.')
 

Exemple:

 if(null == System.getenv()['GRADLE_USER_HOME']) {
    throw new GradleException('Required GRADLE_USER_HOME environment variable not set.')
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X