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

o8x7eapl  于 2022-11-14  发布在  Kotlin
关注(0)|答案(3)|浏览(157)

在阅读了多篇关于该主题的文章和Gradle手册后,我尝试运行下面的代码块。我运行了下面的代码块,并得到了以下错误:执行命令==空!
下面的代码块我做错了什么?

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

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

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

qhhrdooz1#

要定义使用GradleKotlinDSL运行命令行的Gradle任务,请在您的构建文件中执行以下操作:

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

在上面的例子中,commandLine只会运行echo,输出值test,所以把它替换成你想做的任何事情。
然后,您可以使用gradle buildFromAvro运行该命令
更多信息,请访问:https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Exec.html

pgx2nnw8

pgx2nnw82#

如果添加到现有任务:

exec {
    commandLine("echo", "hi")
}
nnt7mjpx

nnt7mjpx3#

另一种方法是使用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
    }
}

相关问题