Gradle通常会确定任务顺序本身,这通常很好,但有时您需要任务排序。
根据the User Guide和other discussion here,有两种基本的订购方式:
然而,在某些情况下,这两种方法似乎都很麻烦。
示例1 : 在由某个连续构建系统运行的日常任务中,您可能有一个序列:
setupTask1 setupTask2 build test sendReport
现在,您可以通过在gradle命令行上传递这些任务来实际编写外部脚本,即
gradle setupTask1 setupTask2 build test sendReport
但是如果你想在构建文件本身(而不是外部)中编写(并记录)这个序列,你需要创建一个新任务,然后添加四个新的排序约束吗?
示例2 : 现在想象我们有
startServer1 startServer2 integrationTest tearDownServer2 tearDownServer1
在这种情况下,我们需要排序,但也要控制失败,因为如果integrationTest失败,您仍然希望拆除步骤发生。然后我们不仅需要mustRunAfter,我们还要添加finalizedBy。我们在integrationTest上添加终结器吗?如果我们添加更多需要这种线束的测试呢?如果我们想让tearDownServer1相对于tearDownServer2进行排序怎么办?
总之,测序看起来非常笨拙,至少对于Gradle新手来说。在某些情况下,仅仅以更迫切的方式直接对事物进行排序可能更为优雅。我错过了什么吗?这里有更好的方法吗?
答案 0 :(得分:2)
建议(高度)使用(已命名的)解决方案来使用dependsOn
和mustRunAfter
。
如果您可以调用任务而不是依赖任务,那么您可以尝试以下可能的 示例一 解决方案。创建一个按顺序执行任务的任务。你会得到这样的东西:
task dailyCIJob << {
[setupTask1, setupTask2, build, test, sendReport].each {
it.execute()
}
}
示例二 的解决方案有两个,两个都不令人满意:
--continue
Gradle commanline参数。如果任务失败,这将使Gradle继续。ignoreFailures
布尔属性。