为什么Groovy找不到这个程序,尽管它就在我的PATH上?[英] Why can't Groovy find this program even though it's on my PATH?

问题描述

tl; dr: groovy找不到程序(phantomjs,在我的$PATH上),当我尝试从类中执行shell命令时 - 否则就会找到它从Groovy Console或Grails Cli脚本中进行罚款.什么给?

我们有一个Grails脚本来执行phantomjs中的JavaScript单元测试("无头Webkit").当这些测试以独立脚本执行(称为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控制台中尝试了它,并且从那里起作用.

现在,如果我从phantomjs切换到/absolute/path/to/phantomjs,则可以正常工作.但是,硬编码的绝对文件系统路径进入类不能是解决方案.

so:为什么在这种情况下Groovy找不到phantomjs?

更新:我怀疑这可能与我的IDE有关(Intellij Idea)有关,因为从命令行运行此错误似乎并未发生.

事实证明,

推荐答案

这与尝试从我的IDE(Intellij Idea)中运行测试有关,更具体地说,试图在OS X机器上执行此操作.

解决方案是使用launchd.conf向我的PATH添加phantomjs.我...

  1. 创建/etc/launchd.conf

  2. 向其添加了以下行:(注意:我用 homebrew )

    setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

  3. 重新启动了我的机器,以便新的launchd配置将生效.

  4. 回到我的IDE并重新进行了测试.

所有测试成功进行.

其他推荐答案

您可以尝试用Groovy

打印路径
['sh', '-c', 'echo $PATH' ].execute().text

println System.getenv('PATH')

您可以创建一个具有绝对路径的环境变量,并在运行时验证它,并提醒是否正确配置了它.

本文地址:https://www.itbaoku.cn/post/1740197.html