【发布时间】:2014-12-14 00:00:21
【问题描述】:
假设我在我的 gradle 构建脚本中创建了单独的任务来运行集成和验收测试。当我运行构建任务时,我想按以下顺序运行测试任务:单元测试(测试任务)、集成测试(intergationTest 任务)和验收测试(acceptanceTest 任务)。这可能吗?如何实现?
【问题讨论】:
标签: gradle task automated-tests build-script
假设我在我的 gradle 构建脚本中创建了单独的任务来运行集成和验收测试。当我运行构建任务时,我想按以下顺序运行测试任务:单元测试(测试任务)、集成测试(intergationTest 任务)和验收测试(acceptanceTest 任务)。这可能吗?如何实现?
【问题讨论】:
标签: gradle task automated-tests build-script
您正在寻找 Gradle 文档 - http://www.gradle.org/docs/current/userguide/more_about_tasks.html中描述的“应该追随”
【讨论】:
taskY.shouldRunAfter taskX1, taskX2 有效。 gradle.org/docs/current/javadoc/org/gradle/api/…
在不创建人为依赖关系的情况下,您可以这样做:
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"
【讨论】:
这就是我在项目中所做的。
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)
}
它帮助我按组排序任务。
【讨论】:
我根据我在 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
【讨论】:
列表中的第一个答案对我来说非常棒。我用过
X.shouldRunAfter Y
【讨论】: