Come posso interrompere una build di Gradle dopo aver rilevato un problema? Posso usare un assert, lanciare un'eccezione, fare un System.exit (cattiva idea), o usare una funzione dedicata in Gradle (ma non ho potuto trovarne una). Qual è il modo migliore per Gradle (e perché?).Modo consigliato per arrestare una build di Gradle
risposta
Solitamente lancio l'eccezione rilevante da org.gradle.api
package, ad esempio InvalidUserDataException
per quando qualcuno ha inserito qualcosa di non valido, o GradleScriptException
per errori più generali.
Se si desidera interrompere l'attività o azione in corso, e passare a quello successivo, si può anche gettare un StopActionException
non esiste attualmente alcun metodo dedicato, anche se ci sono state discussioni per aggiungere uno.
Il metodo consigliato per interrompere una build di Gradle consiste nel generare un'eccezione. Poiché Groovy non ha eccezioni controllate, e Gradle di default non stampa il tipo di eccezione, non è così critico quale eccezione viene lanciata. Negli script di compilazione, viene spesso utilizzata GradleException, ma un'asserzione Groovy sembra ragionevole (a seconda delle circostanze e del pubblico). L'importante è fornire un messaggio chiaro. L'aggiunta di una causa (se disponibile) aiuta a eseguire il debug (--stacktrace
).
Gradle fornisce tipi di eccezione dedicati StopExecutionException
/StopActionException
per l'arresto dell'azione attività/attività corrente ma continuazione della compilazione.
Se si desidera interrompere la compilazione, buttare:
throw new GradleException('error occurred')
o gettare le sottoclassi per l'eccezione di cui sopra. Alcune eccezioni delle sottoclassi in realtà falliscono solo l'attività corrente, ma continuano con la compilazione.
Un'altra opzione se non si desidera essere in grado di rilevare l'eccezione in un secondo momento è chiamare l'operazione di fail della formica. È leggermente più facile da leggere secondo me e puoi dare un bel messaggio all'utente senza usare --stacktrace.
task (tarball, dependsOn: warAdmin) << {
ant.fail('The sky is falling!!')
}
ti dà un messaggio del tipo:
* What went wrong:
Execution failed for task ':tarball'.
> The sky is falling!!
Probabilmente possibile prendere questo (forse getta BuildException formica?), Ma se questo è un obiettivo quindi non vorrei usare formica. fallire. Vorrei semplicemente rendere più semplice vedere quale eccezione prendere generando un'eccezione gradle standard come suggerito da tim_yates.
Come posso configurarlo? Chiamalo? – powder366
chiama semplicemente ant.fail ('messaggio di tua scelta') nessuna configurazione richiesta – Gus
Sembra che l'output di questo è ** identico ** all'utilizzo di 'lancia nuova GradleException (" Il cielo sta calando !! ")' (Gradle 3.4.1) – mgaert
Lanciare un semplice GradleException funziona per fermare lo script di compilazione. Funziona alla grande per il verificando l'impostazione dell'ambiente richiesto.
GradleException('your message, why the script is stopped.')
Esempio:
if(null == System.getenv()['GRADLE_USER_HOME']) {
throw new GradleException('Required GRADLE_USER_HOME environment variable not set.')
}
Ecco un frammento di codice che cerca di emulare come il compito javac Gradle genera errori:
task myCommand(type:Exec) {
... normal task setup ....
ignoreExitValue true
standardOutput = new ByteArrayOutputStream()
ext.output = { standardOutput.toString() }
doLast {
if (execResult.exitValue) {
logger.error(output())
throw new TaskExecutionException(it,
new Exception("Command '${commandLine.join(' ')}' failed; "
+ "see task output for details.")
)
}
}
}
Quando il comando restituisce 0
non c'è uscita. Qualsiasi altro valore stamperà lo standard Output e fermerà la build.
NOTA: Se il comando scrive anche su errorOutput, potrebbe essere necessario includerlo nel registro degli errori.
- 1. java modo consigliato per arrestare più sessioni utente
- 2. Generazione automatica di una pipeline di build per gradle build utilizzando Jenkinsfile
- 3. Modo pulito per arrestare Logstash
- 4. Passare le proprietà a una build gradle
- 5. imposta una variabile di ambiente da una build Gradle
- 6. gRPC: Qual è il modo consigliato di arrestare un server asincrono in C++?
- 7. Errore build gradle Android
- 8. Gradle get corrente build type
- 9. modo consigliato per codificare/decodificare gli URL
- 10. Campi personalizzati per un tipo di build in gradle
- 11. Build di gradle per ogni cartella di risorse
- 12. Modo corretto per arrestare le attività asyncio
- 13. Sublime Build System for Gradle
- 14. Gradle: modifica NDK build target indipendente dall'obiettivo di build SDK
- 15. Include progetto in gradle build
- 16. Running Gradle Build Molto lungo
- 17. Come posso trasformare un file .properties durante una build Gradle?
- 18. C'è un modo per suddividere/estrapolare parti comuni di Gradle build
- 19. Esiste un modo per arrestare in modo non violento una determinata attività di sedano?
- 20. Modo consigliato per gestire i processi di script PHP persistenti?
- 21. Build gradle system app come parte della build AOSP
- 22. Modo consigliato per ottenere attività all'interno della schermata di mortaio?
- 23. Come specificare la versione Java richiesta in una build Gradle
- 24. intellij build jar artefatto contenente dipendenze gradle
- 25. Come utilizzare proguard.jar personalizzato in build Gradle?
- 26. installa gradle per l'utilizzo in cordova build android
- 27. Modo consigliato per utilizzare gli helper di visualizzazione di Rails in una classe di presentazione
- 28. Android Studio 2.0 build errore Gradle
- 29. Griffon: esecuzione 'gradle build' - Esecuzione fallita per task ': jfxJar'
- 30. Un modo corretto per arrestare i flussi di Akka a condizione
È anche possibile utilizzare [TaskExecutionException] (http://www.gradle.org/docs/current/javadoc/org/gradle/api/tasks/TaskExecutionException.html) se un'attività non viene eseguita correttamente. (Questo è vero secondo i documenti di gradle 1.11, non sono sicuro quando è stato introdotto.) –
ci sono delle belle opzioni di sintassi qui? Considera la sintassi delle precondizioni di kotlin: 'require (qualcosa! = Qualunque cosa) {" Non va bene! " } 'al contrario di più verbose e type -ee' if (qualcosa! = qualunque) {lancia nuova GradleException ("No good!")} ' – Groostav
La cosa terribile di' GradleScriptException' è che richiede un secondo parametro per un causa. – Trejkaz