Відповіді:
Зазвичай я викидаю відповідний виняток з 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, можливо, вам знадобиться включити це в журнал помилок.