Appearance
任务规则
任务规则(Task Rules)允许定义动态任务的创建规则,当用户请求匹配规则的任务时,Gradle 动态创建并执行该任务。
基本用法
kotlin
// build.gradle.kts
tasks.addRule("Pattern: ping<ServiceName>") { taskName ->
if (taskName.startsWith("ping")) {
val serviceName = taskName.removePrefix("ping")
tasks.register(taskName) {
group = "ping"
description = "Ping $serviceName 服务"
doLast {
println("Pinging $serviceName...")
// 实际的 ping 逻辑
}
}
}
}bash
# 可以执行任何 ping 开头的任务
./gradlew pingAuthService
./gradlew pingOrderService
./gradlew pingDatabase
# 查看规则说明
./gradlew tasks
# ping tasks
# ----------
# Pattern: ping<ServiceName>实用示例:环境部署
kotlin
tasks.addRule("Pattern: deployTo<Environment>") { taskName ->
if (taskName.startsWith("deployTo")) {
val env = taskName.removePrefix("deployTo").lowercase()
val validEnvs = setOf("dev", "test", "staging", "prod")
if (env in validEnvs) {
tasks.register(taskName) {
group = "deployment"
description = "部署到 $env 环境"
doLast {
println("正在部署到 $env 环境...")
// 部署逻辑
}
}
}
}
}bash
./gradlew deployToDev
./gradlew deployToProd与 dependsOn 结合
kotlin
tasks.addRule("Pattern: migrate<Version>") { taskName ->
val match = Regex("migrate(\\d+)").find(taskName)
if (match != null) {
val version = match.groupValues[1]
tasks.register(taskName) {
doLast {
println("执行版本 $version 的数据库迁移")
}
}
}
}
tasks.register("migrateAll") {
dependsOn("migrate001", "migrate002", "migrate003")
}下一步
- 依赖管理基础 - 学习项目依赖管理