我想创建一个build.gradle文件,它将另一个加载到其中。
第二个文件应该具有“defaulttasks”,这意味着当第一个文件中不存在该任务时,它们应该执行。
文件一:

apply from ("..otherfile.gradle")
task "hello"(overwrite: true) {
doFirst{
    println "hello from here"
}
}
第二个文件:
task "hello" {
doFirst{
    println "i am the old one"
}
}
当我运行它时,它失败
原因:java.lang.IllegalStateException:不支持替换其他插件可能已经使用的现有任务。为此任务使用其他名称(“hello”)。
所以我尝试将第二个文件而不是task更改为“tasks.register(” hello“)
之后,它不会失败,但也会执行第二个命令。
如何覆盖任务,以便默认任务不再运行?

最佳答案

完全实现的替换任务已在Gradle 5中弃用,在Gradle 6中已删除,因此恐怕这不再可能。
但是,如果您使用register任务容器的lazy tasks方法,则可以执行以下操作
build.gradle

apply(from: "otherfile.gradle")

tasks.replace("hello").configure {
    actions.clear()
    doFirst{
        println "hello from here"
    }
}
otherfile.gradle
tasks.register("hello") {
    doFirst{
        println "i am the old one"
    }
}
不确定替换任务是否会使事情更容易推断,所以如果可以的话,我会避免这样做。

07-24 09:48
查看更多