3

gradle で grunt を実行するのに問題があります。私はWindowsとcygwinを使用しており、うなり声は明らかにパスにあります:

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 があります)。

私が見つけたいくつかの提案では、commandLineas'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

4

3 に答える 3

2

を使用gruntする必要があったときに、Windows で使用していましたgrunt.cmd。それを行って、コーヒーが失敗した理由 (うなり声が失敗した理由) を理解すると、問題なく動作するようです。

ただし、grunt.cmdWindows専用です。OSを検出する方法を提供するこの質問と回答を見つけました。

于 2013-01-22T22:04:40.173 に答える
1

編集:この記事は非常にタイムリーであり、以下の古い回答を使用するよりもはるかに優れたソリューションです。

Gradle 開発者はこれで私を嫌うかもしれませんが、Exec私はタスクを使用せず、代わりにこれを行います。

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

詳細については、外部プロセスの Groovy ドキュメントを参照してください。ところで、最新の失敗の理由は、Grunt が失敗したことを示す終了コードを返したことです (ゼロ以外)。

于 2013-01-22T23:49:15.743 に答える
0

この gradle プラグインを使用できます: https://plugins.gradle.org/plugin/com.moowork.grunt

于 2014-10-12T17:25:41.340 に答える