首页 > 解决方案 > 将 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 ),我什至找不到任何关于它的讨论。莫名其妙!

标签: gradletask

解决方案


您可以使用 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


推荐阅读