因此,如果我们有一个drop db任务和一个create db任务,一个启动服务器任务和一个runqatest任务,我们想要
上面的数字2显然需要订购或者会破坏,并且gradle不遵守像ant这样的任何订单。怎么做到这一点? (我在这篇文章中已经阅读了很多相关内容
http://markmail.org/thread/wn6ifkng6k7os4qn#query:+page:1+mid:hxibzgim5yjdxl7q+state:results
尽管一个用户错了,但是当你有这个用户时它不具有确定性 1.依赖于c和d 2. c取决于b,a 3. d取决于a,b
因为e决定c将是第一个,所以构建将运行b,a,c,d因此它是完全确定的。我同意如果你有顺序,并且像蚂蚁一样,并行构建更加困难,因为你不能只是顺序运行c和d,因为顺序很重要(而且从用户的角度来看,它更糟糕,大多数情况下并不重要时间)。
如果只是他们会添加一个dependsOnOrdered,那么我们可以在绝对必要时进行订购。
或者有谁知道我们应该这样做的方式是什么?这个问题是在2009年针对gradle提出的!我仍然没有看到gradle中有关如何在需要时执行有序操作的文档。
迪安
答案 0 :(得分:5)
这是一个解决方案:
if (gradle.startParameter.taskNames.contains("qatest") {
qatest.dependsOn startServer
startServer.dependsOn populatedb
populatedb.dependsOn createdb
createdb.dependson dropdb
}
这种方法的局限性在于,只有qatest
是命令行中提供的初始任务的一部分时,它才有效。有时这很好,你可以添加一个检查,以确保用户不会出错。
如果您经常需要这个,可以添加一个小帮助方法,以便更容易地声明这样的工作流程。类似于workflow(qatest, dropdb, createdb, populatedb, startserver)
。
另一种方法是创建任务的“克隆”,并在克隆之间添加任务依赖(仅)。再一次,你可以将它隐藏在一个小抽象背后。例如,createWorkflowTask("startServer") { ... }
可以创建和配置startServer
和startServerWorkflow
任务。
总之,Gradle的可编程性使得克服“工作流程”在Gradle中不是一流概念的问题成为可能。
答案 1 :(得分:3)
Gradle 1.6添加了另一种解决方案,但它仍在孵化:mustRunAfter
。请参阅release notes。