gpt4 book ai didi

gradle - 了解 Gradle 任务依赖关系 (dependsOn)

转载 作者:行者123 更新时间:2023-12-02 06:08:28 26 4
gpt4 key购买 nike

两个问题:

  1. 指定 1 个任务由多个其他任务组成的 gradle 方法是什么?
  2. 似乎 gradle 的 taskName.execute() 方法不尊重 taskName 的 dependentOn 关系,这是真的吗?解决方法是什么?

更多背景:

现在我有一个没有插件的构建脚本(换句话说不是Java)。我想要一个名为 tests 的任务来运行我的所有测试任务。我有3个这样的任务。将它们称为任务 1、任务 2 和任务 3。

我可以说tests.dependsOn ['task1', 'task2', 'task3']

这有点奇怪,因为关系似乎是 tests.isComprisedOf ['task1', 'task2', 'task3']

我可以说:

task tests << {
task1.execute()
task2.execute()
task3.execute()
}

但是task3(它本身依赖于taskSetup)在不运行taskSetup 的情况下运行。换句话说,execute() 调用似乎不遵守 gradle 的依赖解析策略。

最后一个小提示(顺便说一下,我真的很喜欢 gradle),就是很难搜索这个主题,因为依赖关系在 gradle 中意味着两种不同的东西:dependsOn 风格依赖关系和库风格依赖关系。

最佳答案

通常,您不会调用 task.execute() .

您可以通过以下方式指定一项任务由其他任务组成:

task task1 << {
println "Hello"
}

task task2 << {
println "World"
}

task task3(dependsOn: 'task3dependency') << {
println "QBert"
}

task task3dependency << {
println "MR"
}

task tests(dependsOn: ['task1', 'task2', 'task3'])

输出:

$ gradle tests
:task1
Hello
:task2
World
:task3dependency
MR
:task3
QBert
:tests

BUILD SUCCESSFUL

请记住,并不总是保证依赖项任务的运行顺序,但您可以通过 specifying the order 来缓解这种情况。 task2.mustRunAfter task1 。但通常情况下,任务会按照您期望的顺序运行。

此外,您应该阅读 Gradle's Build Lifecycle 。当您使用语法 task task1 << {...} 时,您指定在任务的执行阶段运行的闭包。在执行运行之前,配置阶段会评估您的构建脚本并确定要运行的任务以及运行顺序。当您手动执行任务时,如:

task tests << {
task1.execute()
task2.execute()
task3.execute()
}

您已经绕过了 Gradle 评估任务 3 的任务依赖性的能力,因此它运行任务 3。

关于gradle - 了解 Gradle 任务依赖关系 (dependsOn),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21612729/

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