使用Gradle,我如何确保存在命令

时间:2017-09-28 05:55:05

标签: groovy build.gradle

我正在使用Gradle for AOSP,我想检查一下我的构建环境中是否存在命令。

task printCommand{
    doLast{
        def command = "git --version"
        println command.execute().text
    }
}

以上代码运行完美,它将打印命令“git --version”的输出。

但是我根据Check if a program exists from a Bash script

尝试了另一个命令
task printCommand{
    doLast{
        def command = "command -v docker"
        println command.execute().text
    }
}

它总是显示错误的信息。

  

任务执行失败':printCommand'。   java.io.IOException:无法运行程序“command”:error = 2 ,没有这样的文件或目录

为什么我不能以这种方式使用“命令-v docker”?

有没有更好的方法来检查Gradle中是否存在命令?

2 个答案:

答案 0 :(得分:3)

command是内置的bash命令,而不是二进制文件。

groovy的String.execute将开始一个过程。启动流程的二进制文件必须具有完全限定条件(例如"/usr/bin/docker --version"),或者必须在$PATH(或%PATH%

上找到

答案 1 :(得分:1)

回到主题,我找到了确保在使用Gradle时存在命令的方法,此代码可以避免Gradle脚本被非零exitValue终止,并打印相应的信息。

<body>
    <button class="buttonlogin" onclick="document.getElementById('id01').style.display='block'" style="width:10%;">Login</button>

</body>

更新2019/02/23

如果您收到此错误:

  

无法为任务':checkCommand'设置未知属性'result'   输入org.gradle.api.DefaultTask

task checkCommand{ doLast{ result = exec{ def command = "command -v docker" ignoreExitValue = true executable "bash" args "-l", "-c", command } if(result.getExitValue()==0){ println "Has Docker" }else{ print "No Docker" } } } 前添加def将解决此问题。