仅在可执行文件退出时执行任务

时间:2018-07-16 08:53:31

标签: gradle

仅当可执行文件存在时,我才尝试执行任务。根据我到目前为止发现的内容,应该使用onlyIf,但是如果二进制文件不存在,则对onlyif的求值失败(任务也是如此)。因此,如何真正做到这一点。我认为这是一个相当普遍的用例,因此是否必须有某种标准解决方案来解决此类问题?

task test(type: Exec) {

    onlyIf {
        def result = exec { 
            ignoreExitValue = true
            commandLine 'wskz', '--help'
        }

        result.exitValue != 0
    }

    commandLine 'wskz', '--help'
}

1 个答案:

答案 0 :(得分:0)

如果要通过执行来检查可执行文件是否存在,可以将try-catch放入onlyIf谓词中。

task test(type: Exec) {

    onlyIf {
        try {
            def result = exec { 
                ignoreExitValue = true
                commandLine 'wskz', '--help'
            }
            result.exitValue != 0
        } catch (Exception e) {
            return false
        }
    }

    commandLine 'wskz', '--help'
}

尝试执行程序以查看其是否“存在”可能不是最佳选择。

  • 如果程序存在但不在您的PATH上怎么办?
  • 如果当前用户无权执行该程序怎么办?
  • 执行该程序以查看其是否存在与尝试执行完整任务所需的时间一样长。

在这种情况下,我不知道您希望构建的行为如何,因此我无法提出确定的替代方案。一种建议是简单地在File.canExecute()内使用onlyIf,如果需要搜索PATH,可以与对which / where的调用结合使用。 / p>