gpt4 book ai didi

gradle - 请参阅稍后在构建中定义的 Gradle 任务

转载 作者:行者123 更新时间:2023-12-03 04:00:06 24 4
gpt4 key购买 nike

我们的构建有一些通用逻辑来从配置数据创建任务。还有几个 Gradle 文件我不想依赖它们的执行顺序。

现在,我需要向任务添加任务依赖项,但不知道该任务是在我的构建脚本部分运行之前(在配置时)还是在我的部分之后定义。

[编辑:正如@canillas 所写,我可以说myTask.dependsOn "otherTask"和“懒惰”依赖于尚未定义的“otherTask”,但我需要它相反。]

因为我不会写tasks["otherTask"].dependsOn myNewTask在定义“otherTask”之前,我做了以下辅助函数:

void safelyDoWithTask(String taskName, Closure func) {
def task = tasks.findByName(taskName)
if (task != null) {
func(task)
} else {
project.tasks.whenTaskAdded { task_ ->
if (taskName.equals(task_.getName())) {
func(task_)
}
}
}
}

safelyDoWithTask('otherTask', { it.dependsOn myNewTask })

现在我想知道是否有更规范的方法来实现这一目标?

最佳答案

考虑以下:

// section 1
def dynamicDependencies = [:]

dynamicDependencies['otherTask'] = 'myNewTask'

// section 2
afterEvaluate { project ->
// taskA dependsOn taskB
dynamicDependencies.each { taskA, taskB ->
def task = project.tasks.findByName(taskA)
if (task) { task.dependsOn "${taskB}" }
}
}

// section 3
task myNewTask() {
doLast {
println 'myNewTask !'
}
}

task otherTask() {
doLast {
println 'otherTask !'
}
}

要点是:
  • 第 1 部分在自定义映射中定义了我们的依赖信息
  • 第 2 节使用 afterEvaluate处理 map 的钩子(Hook)
  • 因为上面是与任务定义解耦的,我们可以简单地将它们放在第 3 节(或任何地方)
  • 关于gradle - 请参阅稍后在构建中定义的 Gradle 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47331115/

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