Respostas:
Eu costumo lançar a exceção relevante do org.gradle.api
pacote , por exemplo, InvalidUserDataException
quando alguém digitou algo inválido ou GradleScriptException
por erros mais gerais.
Se você deseja interromper a tarefa ou ação atual e passar para a próxima, também pode lançar um StopActionException
require(something != whatever) { "No good!" }
ao contrário das mais detalhadas e do tipo ee #if(something != whatever){ throw new GradleException("No good!") }
GradleScriptException
é que ele requer um segundo parâmetro para uma causa.
make
é que rules
(tarefas) foram bem-sucedidas ou falharam. Uma vez tentei return false
- Gradle simplesmente ignorou e continuou a correr.
Atualmente, não existe um método dedicado, embora tenha havido discussões para adicionar um.
A maneira recomendada de interromper uma compilação Gradle é lançar uma exceção. Como o Groovy não tem exceções verificadas e o Gradle, por padrão, não imprime o tipo de exceção, não é tão crítico qual exceção é lançada. Nos scripts de construção, o GradleException é frequentemente usado, mas uma asserção Groovy também parece razoável (dependendo das circunstâncias e do público). O importante é fornecer uma mensagem clara. Adicionar uma causa (se disponível) ajuda na depuração ( --stacktrace
).
Gradle fornece tipos de exceção dedicados StopExecutionException
/ StopActionException
para interromper a tarefa / ação atual, mas continuando a construção.
Outra opção, se você não deseja capturar a exceção mais tarde, é chamar a tarefa Ant Fail. É um pouco mais fácil de ler na minha opinião e você pode dar uma boa mensagem ao usuário sem usar o --stacktrace.
task (tarball, dependsOn: warAdmin) << {
ant.fail('The sky is falling!!')
}
Dá uma mensagem como:
* What went wrong:
Execution failed for task ':tarball'.
> The sky is falling!!
Provavelmente você pode entender isso (talvez ele ative o BuildException da formiga?), Mas se esse for um objetivo, eu não usaria o ant.fail. Eu facilitaria a visualização de qual exceção capturar, lançando a exceção gradle padrão, como tim_yates sugeriu.
throw new GradleException("The sky is falling!!")
(Gradle 3.4.1)
Lançar uma GradleException simples funciona para interromper o script de construção. Isso funciona muito bem para verificar a configuração do ambiente necessária.
GradleException('your message, why the script is stopped.')
Exemplo:
if(null == System.getenv()['GRADLE_USER_HOME']) {
throw new GradleException('Required GRADLE_USER_HOME environment variable not set.')
}
Aqui está um fragmento de código que tenta emular como a tarefa Gradle javac gera erros:
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 o comando retorna, 0
não há saída. Qualquer outro valor imprimirá o standardOutput e interromperá a compilação.
NOTA: Se o seu comando também gravar no errorOutput, talvez seja necessário incluí-lo no log de erros.