Ответы:
Я обычно выбрасываю соответствующее исключение из org.gradle.api
пакета , например, InvalidUserDataException
когда кто-то ввел что-то недопустимое, или GradleScriptException
для более общих ошибок.
Если вы хотите остановить текущее задание или действие и перейти к следующему, вы также можете бросить StopActionException
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.
task (tarball, dependsOn: warAdmin) << {
ant.fail('The sky is falling!!')
}
Дает вам сообщение как:
* What went wrong:
Execution failed for task ':tarball'.
> The sky is falling!!
Вероятно, вы можете поймать это (возможно, это вызывает исключение BuildException от муравья?), Но если это цель, я бы не стал использовать ant.fail. Я бы просто показал, какое исключение нужно поймать, выбрасывая стандартное исключение gradle, как предложил tim_yates.
throw new GradleException("The sky is falling!!")
(Gradle 3.4.1)
Создание простого 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.')
}
Вот фрагмент кода, который пытается эмулировать, как задача JavaScript Gradle выдает ошибки:
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
выход не выводится. Любое другое значение напечатает standardOutput и остановит сборку.
ПРИМЕЧАНИЕ. Если ваша команда также записывает данные в errorOutput, вам может потребоваться включить это в журнал ошибок.