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

时间:2018-11-23 02:03:18

标签: java gradle cmd windows-7 java-7

我有一个像这样的方块:

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()
}

我希望输出将在doLast任务的print块内打印,但将在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的文档和发现的许多示例,但是没有运气来解决。

等级:4.10.2,Windows:7,jdk1.8.0_192

谢谢您的建议。

1 个答案:

答案 0 :(得分:1)

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

    errorOutput = out