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

Groovy 使用Gradle,如何确保命令存在,groovy,build.gradle,Groovy,Build.gradle,我正在使用Gradle for AOSP,我想检查我的构建环境中是否存在命令 task printCommand{ doLast{ def command = "git --version" println command.execute().text } } 上面的代码运行完美,它将打印命令“git--version”的输出 但我尝试另一个命令,根据 它总是像这样显示错误的信息 任务“:printCommand”的执行失败。 java.io.I

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

task printCommand{
    doLast{
        def command = "git --version"
        println command.execute().text
    }
}
上面的代码运行完美,它将打印命令“git--version”的输出

但我尝试另一个命令,根据

它总是像这样显示错误的信息

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

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


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

命令
是内置的bash命令,而不是二进制命令


groovy的
String.execute
将启动一个进程。启动进程的二进制文件必须是完全限定的(例如,
“/usr/bin/docker--version”
),或者必须在
$PATH
(或
%PATH%

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

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"
        }
    }
}
更新2019/02/23

如果出现此错误:

无法为任务设置未知属性“结果”:的checkCommand 键入org.gradle.api.DefaultTask


result
前面添加
def
将解决此问题。

您所说的“完全合格”是什么意思?为我工作<代码>任务打印命令{doLast{exec{def command=“command-v docker”可执行文件bash“args”-l“,“-c”,command}}}
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"
        }
    }
}