如何在 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
}
}
在阅读了有关该主题的多篇文章和 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
}
}