我正在尝试实现一个 gradle 任务,以从一系列环境变量值和 shell 执行动态创建 buildsignature.properties 文件。我基本上可以正常工作,但我似乎无法获得 shell 命令的输出。这是我的任务...
task generateBuildSignature << {
ext.whoami = exec() {
executable = "whoami"
}
ext.hostname = exec() {
executable = "hostname"
}
ext.buildTag = System.env.BUILD_TAG ?: "dev"
ant.propertyfile(
file: "${buildDir}/buildsignature.properties",
comment: "This file is automatically generated - DO NOT EDIT!" ) {
entry( key: "version", value: "${project.version}" )
entry( key: "buildTimestamp", value: "${new Date().format('yyyy-MM-dd HH:mm:ss z')}" )
entry( key: "buildUser", value: "${ext.whoami}" )
entry( key: "buildSystem", value: "${ext.hostname}" )
entry( key: "buildTag", value: "$ext.buildTag" )
}
}
但生成的属性字段并未获得 buildUser 和 buildSystem 所需的结果。
#This file is automatically generated - DO NOT EDIT!
#Mon, 18 Jun 2012 18:14:14 -0700
version=1.1.0
buildTimestamp=2012-06-18 18\:14\:14 PDT
buildUser=org.gradle.process.internal.DefaultExecHandle$ExecResultImpl@2e6a54f9
buildSystem=org.gradle.process.internal.DefaultExecHandle$ExecResultImpl@46f0bf3d
buildTag=dev
如何让 buildUser 和 buildSystem 匹配相应 exec 的输出而不是某些默认的 ExecResultImpl toString?这真的没那么难,不是吗?
这是我从 exec 获取标准输出的首选语法:
def stdout = new ByteArrayOutputStream()
exec{
commandLine "whoami"
standardOutput = stdout;
}
println "Output:\n$stdout";
在这里找到:http://gradle.1045684.n5.nabble.com/external-process-execution-td1431883.html http://gradle.1045684.n5.nabble.com/external-process-execution-td1431883.html(请注意,该页面有一个拼写错误,并提到了 ByteArrayInputStream 而不是 ByteArrayOutputStream)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)