Appearance
内置任务类型
Gradle 提供了丰富的内置 Task 类型,无需编写代码即可完成常见操作。
Copy - 文件复制
kotlin
tasks.register<Copy>("copyConfig") {
from("src/config") {
include("*.yml")
exclude("test-*.yml")
}
from("src/scripts") {
include("*.sh")
fileMode = "755".toInt(8) // 设置文件权限
}
into("$buildDir/app")
// 内容替换
filter { line -> line.replace("@VERSION@", project.version.toString()) }
// 重命名
rename("(.+)-template.yml", "$1.yml")
}Exec - 执行外部命令
kotlin
tasks.register<Exec>("npmBuild") {
workingDir("frontend")
commandLine("npm", "run", "build")
// 忽略错误
isIgnoreExitValue = true
// 捕获输出
standardOutput = System.out
errorOutput = System.err
}
// 根据操作系统区分命令
tasks.register<Exec>("runScript") {
val isWindows = org.gradle.internal.os.OperatingSystem.current().isWindows
if (isWindows) {
commandLine("cmd", "/c", "script.bat")
} else {
commandLine("sh", "-c", "./script.sh")
}
}Zip / Tar - 归档打包
kotlin
tasks.register<Zip>("packageApp") {
archiveFileName.set("app-${project.version}.zip")
destinationDirectory.set(layout.buildDirectory.dir("dist"))
from(tasks.named("jar"))
from("src/main/resources") { into("config") }
from("scripts") { into("bin") }
}
tasks.register<Tar>("packageTar") {
archiveFileName.set("app-${project.version}.tar.gz")
destinationDirectory.set(layout.buildDirectory.dir("dist"))
compression = Compression.GZIP
from(tasks.named("jar"))
}Delete - 删除文件
kotlin
tasks.register<Delete>("cleanGenerated") {
delete("src/generated")
delete(fileTree("build") { include("*.tmp") })
}
// 扩展 clean 任务
tasks.named<Delete>("clean") {
delete("src/generated", ".gradle/tmp")
}WriteProperties - 写入 Properties 文件
kotlin
tasks.register<WriteProperties>("generateBuildInfo") {
outputFile = file("$buildDir/resources/main/build.properties")
property("version", project.version)
property("buildTime", java.time.Instant.now().toString())
property("gitCommit", providers.exec {
commandLine("git", "rev-parse", "--short", "HEAD")
}.standardOutput.asText.get().trim())
}JavaExec - 运行 Java 程序
kotlin
tasks.register<JavaExec>("generateCode") {
classpath = sourceSets.main.get().runtimeClasspath
mainClass.set("com.example.CodeGenerator")
args("--output", "$buildDir/generated")
jvmArgs("-Xmx512m")
}GradleBuild - 嵌套调用 Gradle
kotlin
tasks.register<GradleBuild>("buildSubProject") {
dir = file("sub-project")
tasks = listOf("build")
}