我在让 gradle 运行 grunt 时遇到了一些麻烦。我正在使用 Windows 和 cygwin,而 grunt 显然在路径中:
depressio@depressio /cygdrive/c/dev/project
$ which grunt
/cygdrive/c/Users/depressio/AppData/Roaming/npm/grunt
所以,我做了这个 gradle 任务:
task execGrunt(type: Exec) {
workingDir './ui'
commandLine 'grunt'
}
很简单。但是,当我运行它时,我得到了这个异常:
Caused by: org.gradle.process.internal.ExecException: A problem occurred starting process 'command 'grunt''
at org.gradle.process.internal.DefaultExecHandle.setEndStateInfo(DefaultExecHandle.java:195)
at org.gradle.process.internal.DefaultExecHandle.failed(DefaultExecHandle.java:325)
at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:90)
at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:66)
Caused by: java.io.IOException: Cannot run program "grunt" (in directory "C:\dev\project\ui"): CreateProcess error=2, The system cannot find the file specified
at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:71)
... 1 more
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
... 2 more
这是为什么?当我自己去时./ui
,我可以很好地运行 grunt(那里有一个 grunt.js)。
我发现的一些建议让我将 as 定义commandLine
为'cmd', '/c', 'grunt'
,但只是在编辑器中打开 grunt.js。此外,这在 UNIX 上不起作用,只要 PATH 设置正确,我希望此任务在 Windows (cygwin) 和 UNIX 上都有效。
显然,我错过了一些东西。
更新:
虽然这不适用于 UNIX,但我尝试使用'grunt.cmd'
而不是简单地使用'grunt'
. 这也不起作用,但给出了不同的堆栈跟踪:
Caused by: org.gradle.process.internal.ExecException: Process 'command 'grunt.cmd'' finished with non-zero exit value 3
at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:363)
at org.gradle.process.internal.DefaultExecAction.execute(DefaultExecAction.java:39)
at org.gradle.api.tasks.Exec.exec(Exec.java:66)
(还有一堆,但这是最低的“由”引起的)
它似乎至少执行了 grunt,但是,我的咖啡脚本被编译成 js 并且出现了这一行这一事实证明了这一点:Running "clean:0" (clean) task