Как я могу остановить сборку Gradle после обнаружения проблемы? Я могу использовать assert, бросить исключение, сделать System.exit (плохая идея) или использовать выделенную функцию в Gradle (но я не смог ее найти). Каков наилучший способ для Gradle (и почему?).
162
require(something != whatever) { "No good!" }
в отличие от более многословного и прообразногоif(something != whatever){ throw new GradleException("No good!") }
GradleScriptException
что для этого требуется второй параметр.make
том, чтоrules
(задачи) были успешными или неудачными. Однажды я попробовалreturn false
- Градл просто проигнорировал это и продолжил бежать.Если вы хотите остановить сборку, бросьте:
или бросить подклассы для вышеупомянутого исключения. Некоторые из исключений подкласса на самом деле только не выполняют текущую задачу, но продолжают сборку.
источник
В настоящее время нет специального метода, хотя были обсуждения, чтобы добавить один.
Рекомендуемый способ остановить сборку Gradle - создать исключение. Так как Groovy не имеет проверенных исключений, а Gradle по умолчанию не печатает тип исключения, не имеет значения, какое исключение выдается. В сценариях сборки часто используется GradleException, но утверждение Groovy также кажется разумным (в зависимости от обстоятельств и аудитории). Важно предоставить четкое сообщение. Добавление причины (если доступно) помогает при отладке (
--stacktrace
).Gradle предоставляет специальные типы исключений
StopExecutionException
/StopActionException
для остановки текущей задачи / действия задачи, но продолжения сборки.источник
Другой вариант, если у вас нет желания перехватывать исключение позже, - вызвать задачу ant fail. На мой взгляд, это немного легче читать, и вы можете дать пользователю хорошее сообщение без использования --stacktrace.
Дает вам сообщение как:
Вероятно, вы можете поймать это (возможно, это вызывает исключение BuildException от муравья?), Но если это цель, я бы не стал использовать ant.fail. Я бы просто показал, какое исключение нужно поймать, выбрасывая стандартное исключение gradle, как предложил tim_yates.
источник
throw new GradleException("The sky is falling!!")
(Gradle 3.4.1)Создание простого GradleException приводит к остановке сценария сборки. Это прекрасно работает для проверки требуемой настройки среды.
Пример:
источник
Вот фрагмент кода, который пытается эмулировать, как задача JavaScript Gradle выдает ошибки:
Когда команда возвращается,
0
выход не выводится. Любое другое значение напечатает standardOutput и остановит сборку.ПРИМЕЧАНИЕ. Если ваша команда также записывает данные в errorOutput, вам может потребоваться включить это в журнал ошибок.
источник