只有当可执行文件存在时,我才会尝试执行任务。根据我到目前为止的发现,应该使用onlyIf
,但如果二进制不存在,则对onlyif的求值将失败(任务也是如此(。那么,一个人应该如何真正做到这一点呢。我认为这是一个非常常见的用例,所以必须有一些标准的解决方案来解决这类问题吗?
task test(type: Exec) {
onlyIf {
def result = exec {
ignoreExitValue = true
commandLine 'wskz', '--help'
}
result.exitValue != 0
}
commandLine 'wskz', '--help'
}
如果您想通过执行来检查可执行文件是否存在,您可以像这样在onlyIf
谓词中放入try-catch。
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
上怎么办 - 如果当前用户没有执行程序的权限怎么办
- 执行程序查看程序是否存在可能需要与尝试执行完整任务一样长的时间
我不知道在这种情况下你会希望你的构建行为是什么,所以我不能提出一个明确的替代方案。一个建议是在onlyIf
中简单地使用File.canExecute()
,如果您需要搜索PATH
,可以结合调用which
/where
。