Gradle exec commandLine无法按预期工作

时间:2017-11-15 14:50:18

标签: macos gradle command-line

我目前正在OSX中开展Gradle项目 我在.gradle文件中的功能如下所示

ext.MyFunction = {

     def fastlaneCommand = [
             'fastlane',
             '-version'
     ]

     def stdout = new ByteArrayOutputStream()

     exec {
         ignoreExitValue true
         standardOutput stdout
         workingDir PathsModel.instance.GetDeployerRoot()
         commandLine fastlaneCommand
         LOG.WARN("YOUR CLI COMMAND: " + commandLine)
     }
     println "Output:\n$stdout"
}

然后在'build.gradle'

task jenkins_deploy() {
    doFirst {
        MyFunction()
    }
}

什么时候执行commandLine 这输出:

W A R N I N G:  YOUR CLI COMMAND: [fastlane, -version]

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':jenkins_deploy'.
> A problem occurred starting process 'command 'fastlane''

我知道fastlane在我的路径中是'$ HOME / .fastlane / bin',这是可执行文件所在的位置。如果我只是打开终端并输入

  

'fastlane -version'

从任何目录,fastlane工具启动并执行他们应该做的事情。

我想我的问题是: 打开终端和手动输入命令之间有什么可能的区别,我要求Gradle使用'exec'做同样的事情? 我误解了'exec'和'commandLine'究竟做了什么?

关于'fastlane'的一些信息是它使用的是Ruby,我不太了解它。这可能证明是相关的。

编辑:我已经尝试将'版本'作为fastlaneCommand数组中的第二个元素,因为'version'和'-version'

编辑2(实际解决方案):虽然下面标记的答案是明确的解决方法,但解决方案Actual solution充分理由说明为什么会发生这种情况以及它为什么会起作用。

1 个答案:

答案 0 :(得分:2)

TL; DR

我想它应该是:

['sh', 'fastlane', '-version']

<强>解释

我的手臂下没有链接,但如果省略sh,它将作为位于当前目录(或配置为第二个参数的目录)中的脚本执行。如果用sh作为前缀,它将使用shell和$ PATH变量执行。