Gradle Exec 块不会将 standardOutput 重定向到给定的输出流

Gradle Exec block doesn't redirect standardOutput to given output stream

我有这样的方块:

task print() {
    doLast {
        println("stop-1")
        println(getJavaVersion())
        println("stop-3")
    }
}

def getJavaVersion() {
    def out = new ByteArrayOutputStream()
    exec {
        workingDir 'C:/Program Files/Java/jdk1.7.0_80/bin'
        commandLine 'cmd', '/c', 'java', '-version'
        standardOutput = out
    }

    println 'stop-2'
    return out.toString()
}

而且我希望输出将打印在 print 任务的 doLast 块内,但它是在 exec 块之后打印的。

这是输出:

Executing tasks: [print]

Parallel execution with configuration on demand is an incubating feature.

> Task :gcUnicorn-core:print
stop-1
java version "1.7.0_80"
Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
stop-2

stop-3

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

如您所见,输出流为空。

我查阅了 Gradle 的文档和我找到的许多示例,但没有运气解决它。

Gradle: 4.10.2, Windows: 7, jdk1.8.0_192

感谢您的任何建议。

实际上 java -version 将消息打印到标准错误而不是标准输出 (stdout),因此请尝试:

    errorOutput = out