Рекомендуемый способ остановить сборку Gradle
Как я могу остановить сборку Gradle после обнаружения проблемы? Я могу использовать assert, бросить исключение, сделать систему.выход (плохая идея), или использовать специальную функцию в Gradle (но я не мог найти один). Каков наилучший способ для Gradle (и почему?).
6 ответов:
Я обычно бросаю соответствующее исключение из
org.gradle.api
пакета, напримерInvalidUserDataException
когда кто-то вошел, что-то недопустимое, илиGradleScriptException
для более общих ошибок.если вы хотите остановить текущую задачу или действие и перейти к следующему, вы также можете бросить
StopActionException
Если вы хотите остановить сборку, бросьте:
throw new GradleException('error occurred')
или бросить подклассы для выше исключение. Некоторые исключения подкласса фактически только завершают выполнение текущей задачи, но продолжают сборку.
В настоящее время нет специального метода, хотя были обсуждения, чтобы добавить один.
рекомендуемый способ остановить сборку Gradle-это создать исключение. Поскольку Groovy не имеет проверенных исключений, а Gradle по умолчанию не печатает тип исключения, это не так критично, какое исключение выбрасывается. В сценариях сборки часто используется GradleException, но также кажется разумным утверждение Groovy (в зависимости от обстоятельств и аудитории). Что важно это должно обеспечить четкое сообщение. Добавление причины (Если доступно) помогает при отладке (
--stacktrace
).Gradle предоставляет выделенные типы исключений
StopExecutionException
/StopActionException
для остановки текущей задачи / действия задачи, но продолжения сборки.
другой вариант, если у вас нет никакого желания, чтобы иметь возможность поймать исключение позже, чтобы вызвать задачу Ant fail. Это немного легче читать на мой взгляд, и вы можете дать хорошее сообщение пользователю без использования --stacktrace.
task (tarball, dependsOn: warAdmin) << { ant.fail('The sky is falling!!') }
выдает сообщение:
* What went wrong: Execution failed for task ':tarball'. > The sky is falling!!
наверное можете поймать это (возможно, он бросает BuildException муравья?) но если это цель, то я бы не муравей.неудача. Я бы просто сделал это легко увидеть, какое исключение поймать, бросив стандартное исключение gradle, как предложил tim_yates.
бросание простого GradleException работает при остановке сценария сборки. Это отлично работает для проверка настройки среды.
GradleException('your message, why the script is stopped.')
пример:
if(null == System.getenv()['GRADLE_USER_HOME']) { throw new GradleException('Required GRADLE_USER_HOME environment variable not set.') }
вот фрагмент кода, который пытается эмулировать, как задача Gradle javac выдает ошибки:
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." ) ) } } }
когда команда возвращает
0
нет выхода. Любое другое значение выведет стандартный вывод и остановит сборку.Примечание: Если ваша команда также записывает в errorOutput, вам может потребоваться включить это в журнал ошибок.