Como posso parar uma compilação Gradle depois de detectar um problema? Posso usar uma declaração, lançar uma exceção, fazer um System.exit (má ideia) ou usar uma função dedicada no Gradle (mas não consegui encontrar uma). Qual é a melhor maneira para Gradle (e por quê?).
162
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
é querules
(tarefas) foram bem-sucedidas ou falharam. Uma vez tenteireturn false
- Gradle simplesmente ignorou e continuou a correr.Se você deseja interromper a construção, lance:
ou jogue as subclasses para a exceção acima. Algumas das exceções da subclasse, na verdade, apenas falham na tarefa atual, mas continuam com a construção.
fonte
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.fonte
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.
Dá uma mensagem como:
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.
fonte
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.
Exemplo:
fonte
Aqui está um fragmento de código que tenta emular como a tarefa Gradle javac gera erros:
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.
fonte