如何在 Gradle 6.1.1 中使用 Kotlin DSL 运行 命令行命令?

How to run a command line command with Kotlin DSL in Gradle 6.1.1?

在阅读了有关该主题的多篇文章和 Gradle 手册后,我正在尝试 运行 下面的代码块。我 运行 以下并收到以下错误:execCommand == null!

关于我在以下代码块中做错了什么有什么想法吗?

open class BuildDataClassFromAvro : org.gradle.api.tasks.Exec() {

    @TaskAction
    fun build() {
        println("Building data classes.....")
        commandLine("date")
    }
}

tasks.register<BuildDataClassFromAvro>("buildFromAvro") {
    description = "Do stuff"
}

要使用 Gradle Kotlin DSL 定义一个 Gradle 任务 运行 是一个命令行,请在您的构建文件中执行如下操作:

task<Exec>("buildFromAvro") {
    commandLine("echo", "test")
}

在上面的示例中,commandLine 将简单地 运行 echo,输出值 test。所以用你实际想做的任何事情替换它。

然后您可以 运行 使用 gradle buildFromAvro

更多信息在这里:https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Exec.html

另一种方法是使用 Java ProcessBuilder API:

tasks.create("MyTask") {
    val command = "echo Hello"
    doLast {
        val process = ProcessBuilder()
            .command(command.split(" "))
            .directory(rootProject.projectDir)
            .redirectOutput(Redirect.INHERIT)
            .redirectError(Redirect.INHERIT)
            .start()
            .waitFor(60, TimeUnit.SECONDS)
        val result = process.inputStream.bufferedReader().readText()
        println(result) // Prints Hello
    }
}