gpt4 book ai didi

gradle - 有没有比 MustRunAfter 更方便的方法来对 Gradle 中的任务进行排序?

转载 作者:行者123 更新时间:2023-12-02 02:20:33 27 4
gpt4 key购买 nike

Gradle 通常会自行确定任务顺序,这通常没问题,但有时您需要任务顺序。

基于the User Guideother discussion here看来有两种基本的任务排序方式:

  • 使用依赖关系,即taskB依赖于taskA,所以taskA会先执行。
  • 添加新的父任务,并使用 MustRunAfter 作为约束来对子任务进行排序。

然而,在某些情况下,这两种方法似乎都很麻烦。

示例 1:在某些持续构建系统运行的日常任务中,您可能有一个序列:

setupTask1 setupTask2 build test sendReport

现在,您实际上可以通过在 gradle 命令行上传递这些任务来在外部编写此序列的脚本,即

gradle setupTask1 setupTask2 build test sendReport

但是,如果您想在构建文件本身(而不是外部)中写入(并记录)此序列,是否需要创建一个新任务,然后添加四个新的排序约束?

示例 2:现在想象我们有

startServer1 startServer2 integrationTest tearDownServer2 tearDownServer1

在这种情况下,我们需要排序,但也需要控制失败,因为如果集成测试失败,您仍然希望进行拆卸步骤。那么我们不仅需要mustRunAfter,还需要添加finalizedBy。我们是否在 IntegrationTest 上添加终结器?如果我们添加更多需要这种工具的测试呢?如果我们希望tearDownServer1 相对于tearDownServer2 排序怎么办?

总而言之,排序似乎非常笨拙,至少对于 Gradle 新手来说是这样。在某些情况下,以更命令式的方式直接对事物进行排序可能会更优雅。我错过了什么吗?有更好的方法吗?

最佳答案

(强烈)建议使用(已命名的)解决方案来使用 dependsOnmustRunAfter

如果您愿意调用任务而不是依赖于任务,您可以尝试以下可能的解决方案示例一。创建一个按顺序执行任务的任务。你会得到这样的东西:

task dailyCIJob << {
[setupTask1, setupTask2, build, test, sendReport].each {
it.execute()
}
}

对于示例二有两种都不能令人满意的解决方案:

  1. 使用--continue Gradle 命令行参数。如果任务失败,这将使 Gradle 继续运行。
  2. 还有你seem能够为每个(测试)任务设置一个 ignoreFailures bool 属性。

关于gradle - 有没有比 MustRunAfter 更方便的方法来对 Gradle 中的任务进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29157914/

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