gpt4 book ai didi

gradle - Gradle:使用一个任务禁用另一个任务

转载 作者:行者123 更新时间:2023-12-03 05:07:56 25 4
gpt4 key购买 nike

我有三个gradle任务(这是插件中的kotlin代码):

project.task<Task>("checkNeeded") {
doLast {
if (someTest()) {
listOf("SomeCopy", "SomeAction")
.map { project.tasks[it] as AbstractTask }
.forEach { it.isEnabled = false }
}
}
}

project.task<Copy>("SomeCopy") {
dependsOn("checkNeeded")
from(wherever)
into(whatever)
}

project.task<Task>("SomeAction") {
dependsOn("checkNeeded")
doLast {
/* something magical */
}
}

因此, SomeCopysomeAction任务都取决于 checkNeededcheckNeeded的作用是在发现不需要这两个任务时将其禁用。

但是,这崩溃并具有以下异常: Cannot call Task.setEnabled(boolean) on task ':SomeCopy' after task has started execution

因此,如何确保某个任务可以在其他任务之前运行,而这些任务又可以在不需要时禁用其他任务呢?

最佳答案

我最终用onlyIf解决了这个问题:

var needed by Delegates.notNull<Boolean>()

project.task<Task>("checkNeeded") {
doLast {
needed = !someTest()
}
}

project.task<Copy>("SomeCopy") {
dependsOn("checkNeeded")
onlyIf { needed }
from(wherever)
into(whatever)
}

project.task<Task>("SomeAction") {
dependsOn("checkNeeded")
onlyIf { needed }
doLast {
/* something magical */
}
}

请注意, checkNeeded任务并不是真正必需的,但是我希望在此过程中知道何时进行检查。我可以做到的:
val needed by lazy { !someTest() }

project.task<Copy>("SomeCopy") {
onlyIf { needed }
from(wherever)
into(whatever)
}

project.task<Task>("SomeAction") {
onlyIf { needed }
doLast {
/* something magical */
}
}

关于gradle - Gradle:使用一个任务禁用另一个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54520491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com