Skip to content

内置任务类型

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")
}

下一步