tl; dr:クラスからシェルコマンドを実行しようとすると、Groovyはプログラム(phantomjs
にあります$PATH
)を見つけることができません。それ以外の場合は、GroovyコンソールまたはGrailsCLIスクリプトから問題なく検出されます。何が得られますか?
PhantomJS(「ヘッドレスWebKit」)でJavaScriptユニットテストを実行するためのGrailsスクリプトがあります。これらのテストをスタンドアロンスクリプト(それと呼びますgrails test-js
)で実行すると、問題なく動作します。Grails/Gantスクリプトの関連する行は次のとおりです。
// where 'jsTests' is a List with the paths to each test
def failures = 0
jsTests.each {
Process p = "phantomjs lib/phantom-jasmine/lib/run_jasmine_test.coffee file://${it}".execute()
failures += p.exitValue()
}
ただし、これを通常のgrails test-app
サイクルの一部として実行する必要があるため、の実装を作成しましたorg.codehaus.groovy.grails.test.GrailsTestType
。その実装でテストを実行する必要がある部分に到達すると、同じコード(上記のように)は機能せず、Groovy/Grailsは次のように文句を言います。
java.io.IOException: Cannot run program "phantomjs": error=2, No such file or directory
私の最初の考えはそれが私のものでphantomjs
はなかったということでした$PATH
-しかし、私はそれがそうであることを知っています、そして再び:それはGrails/Gantスクリプトから実行されたときに機能しました。そこで、Groovy Consoleで試してみましたが、そこからは問題なく動作します。
ここで、に切り替えるphantomjs
と/absolute/path/to/phantomjs
、正常に動作します。ただし、ファイルシステムの絶対パスをクラスにハードコーディングすることは解決策にはなりません。
だから:なぜGroovyはphantomjs
そのような状況で見つけられないのですか?
更新:コマンドラインからこれを実行するとこのエラーが発生していないように見えるため、これは私のIDE(IntelliJ Idea)と関係があるのではないかと思います。