我在Android Studio的build.gradle
脚本中有以下功能:
def getBuildCommit() {
return ['git', 'rev-parse', 'HEAD'].execute().text.trim()
}
如果git
未在PATH
上,则此代码失败并显示错误。我的目标是,如果git
不可用,这不应该失败,而是返回一个空字符串,并允许构建正常继续。此代码必须在Windows和Linux主机上都能运行。
有没有办法在调用它之前先检查git
是否存在(类似于linux上的$ which git
)?或者也许是execute()
的一种方式,没有像这样的失败案例中抛出的异常?
答案 0 :(得分:0)
好吧,你可以将它包装在try / catch块中,如果有异常则返回空字符串。
但实际上,当你在Gradle land时,我会使用类型Exec
或exec
方法的任务,它们都具有相同的功能。所以在你的情况下,完整的例子就像是
def getBuildCommit() {
try {
new ByteArrayOutputStream().withStream { out ->
def result = exec {
commandLine 'git', 'rev-parse', 'HEAD'
ignoreExitValue true
standardOutput out
errorOutput = [ write: { Object... args -> } ] as OutputStream
}
return (result.exitValue == 0) ? (out as String).trim() : ''
}
} catch(Exception e) {
return ''
}
}