Appearance
任务基础
Task(任务)是 Gradle 构建的基本执行单元。每一个构建操作(编译、测试、打包)都是一个 Task。
定义任务
方式一:register(推荐)
kotlin
// build.gradle.kts
tasks.register("hello") {
group = "demo"
description = "打印 Hello World"
doLast {
println("Hello, Gradle!")
}
}bash
./gradlew hello
# > Task :hello
# Hello, Gradle!方式二:register 带类型
kotlin
tasks.register<Copy>("copyDocs") {
from("src/docs")
into("$buildDir/docs")
}
tasks.register<Exec>("runScript") {
commandLine("python", "scripts/generate.py")
}方式三:named(配置已有任务)
kotlin
// 配置由插件创建的现有任务
tasks.named<Test>("test") {
useJUnitPlatform()
maxHeapSize = "1g"
}
tasks.named("jar") {
// 不知道类型时的配置
}任务动作(Actions)
每个 Task 可以有多个动作,按顺序执行:
kotlin
tasks.register("multiAction") {
doFirst {
println("第一个 doFirst")
}
doFirst {
println("第二个 doFirst(倒序执行,这个先执行)")
}
doLast {
println("第一个 doLast(正序执行,这个先执行)")
}
doLast {
println("第二个 doLast")
}
}执行结果:
第二个 doFirst(倒序执行,这个先执行)
第一个 doFirst
第一个 doLast(正序执行,这个先执行)
第二个 doLast任务的基本属性
kotlin
tasks.register("myTask") {
group = "my-group" // 任务分组(./gradlew tasks 时显示)
description = "任务的描述" // 帮助信息
enabled = true // 是否启用(false 则跳过)
doLast {
println("任务名称: $name")
println("任务路径: $path")
println("任务分组: $group")
}
}查看所有任务
bash
# 查看分组显示的任务
./gradlew tasks
# 查看所有任务(含内部任务)
./gradlew tasks --all
# 查看特定任务的帮助
./gradlew help --task compileJava输出示例:
Demo tasks
----------
hello - 打印 Hello World
multiAction - 演示多动作
Build tasks
-----------
assemble - Assembles the outputs of this project.
build - Assembles and tests this project.
...禁用和跳过任务
kotlin
// 禁用任务(每次都跳过)
tasks.named("javadoc") {
enabled = false
}
// 根据条件跳过
tasks.named("deploy") {
onlyIf { project.hasProperty("prod") }
doLast { println("部署中...") }
}
// 命令行跳过
// ./gradlew build -x test获取任务实例
kotlin
// 获取任务引用,用于在其他地方操作
val compileJava = tasks.named<JavaCompile>("compileJava")
tasks.register("afterCompile") {
dependsOn(compileJava)
doLast {
println("编译完成,输出目录:${compileJava.get().destinationDirectory.get()}")
}
}动态创建任务
kotlin
// 批量创建环境相关任务
listOf("dev", "test", "prod").forEach { env ->
tasks.register("deploy${env.capitalize()}") {
group = "deploy"
description = "部署到 $env 环境"
doLast {
println("正在部署到 $env...")
}
}
}