Java 如何在已编译的Gradle插件中运行命令行命令?

Java 如何在已编译的Gradle插件中运行命令行命令?,java,gradle,Java,Gradle,如果没有Gradle DSL(命令行'echo',':)'),您如何从Gradle任务执行CMD命令,例如: open class MyTask : DefaultTask() { @TaskAction fun task() { Runtime.getRuntime().exec("echo :)") //Doesn't print anything } } 不打印任何内容,因为exec方法在一个新进程中执行给定的命令,与处理Gradle任务的进程

如果没有Gradle DSL(
命令行'echo',':)'
),您如何从Gradle任务执行CMD命令,例如:

open class MyTask : DefaultTask() {

    @TaskAction
    fun task() {
        Runtime.getRuntime().exec("echo :)") //Doesn't print anything
    }

}

不打印任何内容,因为
exec
方法在一个新进程中执行给定的命令,与处理Gradle任务的进程分离(并有自己的I/O流)

exec
方法返回流程对象。引用文档,该流程“提供对ProcessBuilder.start和Runtime.exec启动的本机流程的控制”

因此,要捕获已执行命令的输出,需要从该命令的进程中读取它

echo:)
打印输出的简单示例可以是:

task something {
    doLast {
        Process echo = Runtime.getRuntime().exec("cmd /c echo :)")
        println new BufferedReader(new InputStreamReader(echo.getInputStream())).readLine()
    }
}

(由于Windows操作系统的原因,我有
cmd/c
命令前缀)

什么也不打印,因为
exec
方法在一个新进程中执行给定的命令,与处理Gradle任务的进程分离(并且有自己的I/O流)

exec
方法返回流程对象。引用文档,该流程“提供对ProcessBuilder.start和Runtime.exec启动的本机流程的控制”

因此,要捕获已执行命令的输出,需要从该命令的进程中读取它

echo:)
打印输出的简单示例可以是:

task something {
    doLast {
        Process echo = Runtime.getRuntime().exec("cmd /c echo :)")
        println new BufferedReader(new InputStreamReader(echo.getInputStream())).readLine()
    }
}
(由于Windows操作系统,我有
cmd/c
命令前缀)