gradle - 将 Gradle 任务标记为“失败”
问题描述
我想向 Gradle“构建”添加一个额外的任务,特别是将文件复制到资源中。
所以我这样做:
task copySettingsGradle(type: Copy) {
from file("settings.gradle")
into file("src/main/resources")
}
build.dependsOn copySettingsGradle
但是,如果 settings.gradle 不存在,它目前似乎默默地失败:构建正常进行。
如果这个必需的任务失败,我想防止构建发生。为此,在我看来,我需要两件事:确定from.file(...)
找不到文件的方法,然后是在任务上设置“失败”标志的方法......或其他东西。
试图解决这个问题导致我AbstractCopyTask
然后是CopySourceSpec.from ...但我并不聪明。
当然,我可以使用非 DSL Groovy 来复制和执行成功检查。但令我困惑的是,将所需任务标记为失败的问题。
这里有一个问题,从 8 年前开始,关于“停止 Gradle 构建的方法”。在他的回答中,Peter Niederwieser 说“已经讨论过要添加 [a way of stop]”。
此外,在Gradle 官方文档的这个页面上,我看到使用了以下表达式:“任务将被标记为失败”(如果计时器用完)。“标记为失败”……这意味着???
我发现我无法找到任何有关此的信息真是太神奇了!“依赖”的概念涉及依赖于其他事物的存在或成功。我不仅不知道GradleException
现在 Gradle 中是否引入了这样的机制(除了抛出 a ),我什至找不到任何关于它的讨论。莫名其妙!
解决方案
您可以使用 ANT 复制任务来执行此操作。Gradle 允许将调用委托给底层的 ANT 运行时。
ANT 复制任务提供了一个名为 failonerror 的选项,它会为您提供 failure-if-file-not-found 行为。
它看起来像这样:
task copySettingsGradle {
doLast {
ant.copy(file: 'settings.gradle',
todir: 'src/main/resources',
overwrite: true,
failonerror: true)
}
}
有关所有可用选项,请参见 ANT 文档: https ://ant.apache.org/manual/Tasks/copy.html
推荐阅读
- google-chrome - Chrome DevTools 打开时阻止页面刷新
- php - PHP MySQL分组问题
- python - 500 内部服务器错误 - Django wsgi 错误显示在 apache2 日志上
- c++ - 找到两对数字,使它们的乘积绝对差最小化
- ios - 可以显示UILabel代码,但不能显示UITextView。我错过了什么?
- python - Python 改变我的绘图数据点?[直方图]
- macos - 如何将 macOS 上的 dylib 与 clang(例如 libjpeg)链接?
- reporting-services - 摘要和个人的 SSRS 报告
- linux - 使用 GCC 内联汇编获取 Linux 系统调用的返回值
- postgresql - 如何将一个表与另一个表中的一系列值连接起来?