Skip to content

任务顺序控制

mustRunAfter

mustRunAfter 确保当两个任务都被执行时,一个必须在另一个之后运行。不会触发被依赖任务的执行

kotlin
tasks.register("migrateDB") { doLast { println("数据库迁移") } }
tasks.register("startApp")  { doLast { println("启动应用") } }

tasks.named("startApp") {
    mustRunAfter("migrateDB")
}
bash
# 同时执行两个任务,migrateDB 先执行
./gradlew migrateDB startApp

# 只执行 startApp,不触发 migrateDB
./gradlew startApp

shouldRunAfter

shouldRunAfter 是弱顺序约束,在存在循环依赖风险时 Gradle 会忽略它:

kotlin
tasks.named("test") {
    shouldRunAfter("unit")
}

finalizedBy

finalizedBy 定义终结任务,无论主任务成功还是失败,终结任务都会执行(常用于清理):

kotlin
tasks.register("setupDB") { doLast { println("启动测试数据库") } }
tasks.register("teardownDB") { doLast { println("关闭测试数据库") } }

tasks.named("test") {
    dependsOn("setupDB")
    finalizedBy("teardownDB")  // 测试完成后(无论成败)关闭数据库
}

综合示例:测试流程

kotlin
tasks.register("startTestServer") {
    group = "verification"
    doLast { println("启动测试服务器 :8080") }
}

tasks.register("stopTestServer") {
    group = "verification"
    doLast { println("关闭测试服务器") }
}

tasks.named<Test>("test") {
    dependsOn("startTestServer")
    finalizedBy("stopTestServer")
}

tasks.named("stopTestServer") {
    mustRunAfter("test")
}

下一步