Gradle 无法使用 overwrite:true 覆盖任务

Jul*_*mke 4 groovy overriding overwrite gradle

我想创建一个 build.gradle 文件,它将加载另一个文件。

第二个文件应该有“defaulttasks”,这意味着当第一个文件中不存在任务时它们应该执行。

文件一:

apply from ("..otherfile.gradle")
task "hello"(overwrite: true) {
  doFirst{
    println "hello from here"
  }
}
Run Code Online (Sandbox Code Playgroud)

第二个文件:

task "hello" {
  doFirst{
    println "i am the old one"
  }
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它失败了

原因:java.lang.IllegalStateException:不支持替换可能已被其他插件使用的现有任务。为此任务使用不同的名称(“hello”)。

所以我尝试将第二个文件而不是任务更改为tasks.register("hello")

之后它不会失败,但它也会执行第二个。如何覆盖任务以使默认任务不再运行?

Ren*_*cic 5

对我来说,比 @dpr 建议的更短的解决方案也有效。您可以避免禁用任务并添加dependsOn任务。对于从未版本 6.8.2,我可以确认 @tim_yates 提供的解决方案不适合我。即使在脚本插件任务中添加了 .register() 方法,也会引发异常。

现在要覆盖方法,我从脚本插件重新配置现有任务,如下所示:

tasks.hello.configure {
  actions.clear()
  doLast {
    println("")
    println("Action new")
    println("")
  }
}
Run Code Online (Sandbox Code Playgroud)

操作列表被清除,因此所有先前的任务都被删除,然后您可以定义触发任务时要执行的任何内容。