如何使Gradle以特定顺序运行任务?

时间:2014-10-18 15:23:38

标签: gradle task automated-tests build-script

让我们说我在gradle构建脚本中创建了运行集成和验收测试的单独任务。当我运行构建任务时,我想按此顺序运行测试任务:单元测试(测试任务),集成测试(intergationTest任务)和验收测试(acceptanceTest任务)。这可能吗?如何?

5 个答案:

答案 0 :(得分:2)

您正在寻找Gradle文档中描述的“应该运行” - http://www.gradle.org/docs/current/userguide/more_about_tasks.html

答案 1 :(得分:2)

以下是如何在不创建人为依赖的情况下实现的:

https://caffeineinduced.wordpress.com/2015/01/25/run-a-list-of-gradle-tasks-in-specific-order/

TLDR;版本:

//--- build aliases : define a synonym here if you want a shortcut to run multiple targets

def buildAliases = [
   'all' : ['clean', 'assemble', 'runProvisioner', 'stopTomcat', 'installTomcat', 'deployToTomcat', 'startTomcat'],
   'rebuild' : ['clean', 'assemble']
]
def expandedTaskList = []

gradle.startParameter.taskNames.each {
    expandedTaskList << (buildAliases[it] ? buildAliases[it] : it)
}

gradle.startParameter.taskNames = expandedTaskList.flatten()

println "\n\n\texpanded task list: ${gradle.startParameter.taskNames }\n\n"

答案 2 :(得分:0)

这就是我在项目中所做的。

check.dependsOn integTest
integTest.mustRunAfter test
tasks.withType(Pmd) {
  mustRunAfter integTest // Pointing to a task
}
tasks.withType(FindBugs) {
  mustRunAfter tasks.withType(Pmd) // Pointing to a group of tasks under Pmd
}
tasks.withType(Checkstyle) {
  mustRunAfter tasks.withType(FindBugs)
}

它帮助我按小组订购任务。

答案 3 :(得分:0)

我根据在Gradle论坛上找到的解决方案创建了此辅助方法。

Task.metaClass.runFirst = { Task... others ->
    delegate.dependsOn(others)
    delegate.mustRunAfter(others[0])
    for (def i=0; i < others.size() - 1; i++) {
        def before = others[i]
        def after = others[i+1]
        after.mustRunAfter(before)
    }
}

然后您可以创建任务X,A,B和C并按以下方式使用:

X.runFirst A, B, C

答案 4 :(得分:0)

列表中的第一个答案对我来说非常好。我用过

X.shouldRunAfter Y