Java 如何在已编译的Gradle插件中运行命令行命令?
如果没有Gradle DSL(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任务的进程
命令行'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
命令前缀)