首页 > 解决方案 > 如何在已编译的 Gradle 插件中运行命令行命令?

问题描述

如何在没有 Gradle DSL ( commandLine 'echo', ':)') 的情况下从 Gradle 任务执行 CMD 命令,例如:

open class MyTask : DefaultTask() {

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

}

标签: javagradle

解决方案


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

exec方法返回 Process 对象。引用文档,进程“提供对由 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命令前缀)


推荐阅读