2013-01-22 65 views
3

我在運行grunt時遇到了一些麻煩。我使用的是Windows和Cygwin和呼嚕聲,顯然是在路徑:用gradle運行grunt

[email protected] /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)。

我發現的一些建議讓我將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) 

(有一大堆更多,但是這是最低「引發」)

它似乎至少執行咕嚕然而,事實證明,我的CoffeeScript得到了編譯成js和這條線出現了:Running "clean:0" (clean) task

+0

你運行的gradle這個shell腳本或gradle.bat?如果您正在運行gradle.bat,則您的路徑可能不會從Cygwin路徑繼承。 – Jared

+0

它使用shell腳本。雖然兩者都遇到了同樣的問題。 – Depressio

回答

2

我在Windows中使用grunt,我應該一直在使用grunt.cmd。一旦我這樣做,並找出爲什麼咖啡失敗(爲什麼咕嚕聲失敗),它似乎工作正常。

但是,grunt.cmd僅適用於Windows。我找到了this question and answer,它提供了一種檢測操作系統的方法。

1

編輯:This article是非常及時的,是一個更好的解決方案比以下使用我的舊答案。

的搖籃開發人員可能會恨我,但我不使用Exec任務,我這樣做,而不是:

task execGrunt { 
    doLast { 
     println "grunt".execute().text 
    } 
} 

更多見Groovy docs for external processes。順便說一句,你最近失敗的原因是Grunt返回了一個退出代碼,說它失敗了(非零)。