我目前正在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充分理由说明为什么会发生这种情况以及它为什么会起作用。
答案 0 :(得分:2)
TL; DR
我想它应该是:
['sh', 'fastlane', '-version']
<强>解释强>:
我的手臂下没有链接,但如果省略sh
,它将作为位于当前目录(或配置为第二个参数的目录)中的脚本执行。如果用sh
作为前缀,它将使用shell和$ PATH变量执行。