如何在gradle构建脚本中调用程序之前检查程序是否在PATH上?

时间:2017-12-01 16:27:43

标签: android gradle groovy

我在Android Studio的build.gradle脚本中有以下功能:

def getBuildCommit() {
    return ['git', 'rev-parse', 'HEAD'].execute().text.trim()
}

如果git未在PATH上,则此代码失败并显示错误。我的目标是,如果git不可用,这不应该失败,而是返回一个空字符串,并允许构建正常继续。此代码必须在Windows和Linux主机上都能运行。

有没有办法在调用它之前先检查git是否存在(类似于linux上的$ which git)?或者也许是execute()的一种方式,没有像这样的失败案例中抛出的异常?

1 个答案:

答案 0 :(得分:0)

好吧,你可以将它包装在try / catch块中,如果有异常则返回空字符串。

但实际上,当你在Gradle land时,我会使用类型Execexec方法的任务,它们都具有相同的功能。所以在你的情况下,完整的例子就像是

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 ''
    }
}