代码之家  ›  专栏  ›  技术社区  ›  KIC

只有执行可执行任务时才执行任务。

  •  0
  • KIC  · 技术社区  · 7 年前

    只有当可执行文件存在时,我才尝试执行任务。从我目前发现的情况来看 onlyIf 但是如果二进制不存在,则OnLyIF的评估失败(任务也是如此)。所以我们应该怎么做。我认为这是一个非常常见的用例,所以必须有一些标准的解决方案来解决这类问题吗?

    task test(type: Exec) {
    
        onlyIf {
            def result = exec { 
                ignoreExitValue = true
                commandLine 'wskz', '--help'
            }
    
            result.exitValue != 0
        }
    
        commandLine 'wskz', '--help'
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   user31601    7 年前

    如果您想通过执行它来检查可执行文件是否存在,可以在 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() 在你的内心 只有 ,可能与调用 which / where 如果你需要搜索 路径 是的。

    推荐文章