gradle没有任务排序,那么如何实现这一点呢

gradle没有任务排序,那么如何实现这一点呢,gradle,Gradle,因此,如果我们有一个drop db任务、一个create db任务、一个start server任务和一个runqatest任务,我们希望 有独立的任务,所以我可以自己(或其他人)调用gradle dropdb 让runqatest依赖于dropdb、createdb、populatedb和startserver 上面的第二条显然需要命令,否则就会被打破,而格拉德尔并不像蚂蚁那样遵守任何命令。如何做到这一点?(我在这篇帖子上读了很多关于这方面的文章 虽然一个用户是错误的,但当您 1.e依赖于c

因此,如果我们有一个drop db任务、一个create db任务、一个start server任务和一个runqatest任务,我们希望

  • 有独立的任务,所以我可以自己(或其他人)调用gradle dropdb
  • 让runqatest依赖于dropdb、createdb、populatedb和startserver
  • 上面的第二条显然需要命令,否则就会被打破,而格拉德尔并不像蚂蚁那样遵守任何命令。如何做到这一点?(我在这篇帖子上读了很多关于这方面的文章

    虽然一个用户是错误的,但当您 1.e依赖于c和d 2.c依赖于b,a 3.d依赖于a,b

    因为e决定c将是第一个,所以构建将运行b、a、c、d,所以它是完全确定的。我同意,如果你有顺序,并行化一个构建会困难得多,尽管就像ant一样,因为你不能只并行运行c和d,因为顺序很重要(从用户的角度来看,这更糟糕,大部分时间都不重要)

    如果他们能添加一个dependsOnOrdered,这样我们就可以在绝对必要的时候下订单了

    或者有人知道我们应该怎么做吗?这个问题是在2009年针对gradle提出的!!!!我在gradle中仍然没有看到关于如何在需要时进行订购的文档

    Dean

    这里有一个解决方案:

    if (gradle.startParameter.taskNames.contains("qatest") {
        qatest.dependsOn startServer
        startServer.dependsOn populatedb
        populatedb.dependsOn createdb
        createdb.dependson dropdb 
    }
    
    这种方法的局限性在于,只有当
    qatest
    是命令行上提供的初始任务的一部分时,它才起作用。有时这已经足够好了,您可以添加检查以确保用户不会出错

    如果您更经常需要它,您可以添加一个小助手方法,使其更容易声明这样的工作流。类似于
    工作流(qatest、dropdb、createdb、populatedb、startserver)

    另一种方法是创建任务的“克隆”,并(仅)在克隆之间添加任务依赖项。同样,您可以将其隐藏在一些抽象后面。例如,
    createWorkflowTask(“startServer”){…}
    可以创建和配置
    startServer
    startServerWorkflow
    任务


    总之,Gradle的可编程性使得克服“工作流”的问题成为可能在Gradle中还不是一流的概念。

    Gradle 1.6添加了一个替代解决方案,但它仍在酝酿:
    mustRunAfter
    。请参阅。

    这是一个良好的开端。对于多项目构建,它有点脆弱,因为我发现我需要检查“构建”以及“:projectX:build”,但它现在仍然完成了工作!