Відповіді:
Зазвичай я викидаю відповідний виняток з org.gradle.api
пакету , наприклад, InvalidUserDataException
коли хтось ввів щось недійсне, або GradleScriptException
для більш загальних помилок.
Якщо ви хочете зупинити поточне завдання чи дію та перейти до наступного, ви також можете кинути a 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
для зупинки поточного завдання / завдання, але продовження складання.
Іншим варіантом, якщо ви не маєте бажання мати можливість пізніше зловити виняток, - це зателефонувати до завдання, яка не спрацює. На мою думку це читати трохи простіше, і ви можете дати приємне повідомлення користувачеві без використання --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.')
}
Ось фрагмент коду, який намагається наслідувати, як завдання 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, можливо, вам знадобиться включити це в журнал помилок.