我目前正在从 gradle4.5 升级到 6.5,我正在处理的项目有一个 stage.gradle,其中包含 200 多个使用 .execute 调用的自定义任务,该任务已被删除。我看过很多关于如何用dependOn/finalizedBy等替换.execute()的文章,但是这不适用于我的用例。
我已经编写了我的任务的代码示例,如下所示
List listFromDB = []
task getListFromServer() {
doLast{
listFromDB << dataFromDB
}
}
task generateConfig() {
doLast{
listFromDB.each { item ->
// code block 1
def javaTask = task "taskName${item.name}"(type TaskJavaFile) {
param1 = paramTemp1
param2 = paramTemp2
}
javaTask.execute()
// code block 2
def task2 = task "taskName2${item.name}"() {
// code block 3
} task2.execute()
// code block 4
}
}
}
我试图通过将每个 task.execute 之前和之后的代码分隔成自己的任务来替换此代码。然而,我这样做的方式增加了 listFromDB 循环的多次重复,我无法弄清楚如何在 generateConfig2Executor 或 generateConfig4Executor 中调用代码,因为任务是在运行时创建的,但必须在任务开始之前使用 depondsOn(在 doLast 块之外)。
List listFromDB = []
def TasksRunInOrder(Task... tasks) {
for(int i =0; i < tasks.length-1; ++i) {
tasks[i+1].mustRunAfter(tasks[i])
}
}
task getListFromServer() {
doLast{
listFromDB << dataFromDB
}
}
task generateConfig() {
def listOfTasks = []
listOfTasks << getListFromServer
listOfTasks << generateConfig1
listOfTasks << generateConfig2
listOfTasks << generateConfig2Executor
listOfTasks << generateConfig3
listOfTasks << generateConfig4
listOfTasks << generateConfig4Executor
listOfTasks << generateConfig5
dependsOn(TasksRunInOrder(*listOfTasks))
}
task generateConfig1() {
doLast{
listFromDB.each { item ->
// code block 1
}
}
}
task generateConfig2() {
doLast{
listFromDB.each { item ->
task.register("taskName${item.name}",TaskJavaFile) {
param1 = paramTemp1
param2 = paramTemp2
}
}
}
}
task generateConfig2Executor() {
doLast{
def listOfTasks =[]
listFromDB.each { item ->
listOfTasks << tasks.named("taskName${item.name}").get()
}
dependsOn(TasksRunInOrder(*listOfTasks))
}
}
task generateConfig3() {
doLast{
listFromDB.each { item ->
// code block 2
}
}
}
task generateConfig4() {
doLast{
listFromDB.each { item ->
task.register("taskName2${item.name}") {
// codeBlock 3
}
}
}
}
task generateConfig4Executor() {
doLast{
def listOfTasks =[]
listFromDB.each { item ->
listOfTasks << tasks.named("taskName2${item.name}").get()
}
dependsOn(TasksRunInOrder(*listOfTasks))
}
}
task generateConfig5() {
doLast{
listFromDB.each { item ->
// code block 4
}
}
}