GVM/Grails shell脚本错误?

Adj*_*ion 6 shell ubuntu grails path gvm

我在Ubuntu(14.04)上安装了最新版本的GVM(1.3.13).然后我用它来安装Grails(2.3.7),Groovy(2.2.2)和Gradle(1.11).

Groovy和Gradle似乎安装得很好(我可以执行他们的SDK命令,比如groovyc等).但每当我执行任何 Grails命令时,从任何目录,我的整个终端的屏幕都会清除,暂停一秒钟,然后重新绘制我的命令行提示符.该命令永远不会被执行.几个月前,在Nabble上,另一位用户报告了一个非常类似的问题.

从shell开始,如果我执行echo $GRAILS_HOME,我得到:

/home/myuser/.gvm/grails/current

如果我执行,echo $PATH我确实看到它/home/myuser/.gvm/grails/current/bin在我的系统路径上.

所以我决定深入挖掘并实际去$GRAILS_HOME.这是一个实际指向的象征性链接/home/myuser/.gvm/grails/2.3.7.所以当我去那里时,我看到一个正常的Grails安装,包括一个bin目录.当我进入那个bin目录时,我看到:

grails-debug
grails.bat
grails-debug.bat
startGrails.bat
startGrails
grails
Run Code Online (Sandbox Code Playgroud)

我打开grails(一个shell脚本)并看到:

#!/bin/sh
trap "reset" EXIT
trap "reset" INT
trap "reset" TERM

DIRNAME=`dirname "$0"`
. "$DIRNAME/startGrails"

startGrails org.codehaus.groovy.grails.cli.GrailsScriptRunner "$@"
Run Code Online (Sandbox Code Playgroud)

我将其修改如下:

#!/bin/sh
trap "reset" EXIT
trap "reset" INT
trap "reset" TERM

echo "1..."
sleep 2s

DIRNAME=`dirname "$0"`

echo "2...dirname is $DIRNAME"
sleep 8s

. "$DIRNAME/startGrails"

echo "3..."
sleep 2s

startGrails org.codehaus.groovy.grails.cli.GrailsScriptRunner "$@"
Run Code Online (Sandbox Code Playgroud)

然后保存/退出并grails help从shell运行.这是我的输出:

1...
2...dirname is /home/zharvey/.gvm/grails/current/bin
Run Code Online (Sandbox Code Playgroud)

最后一行输出(" 2 ... dirname is ... ")暂停2秒,然后我的屏幕清除(就像我发出clear命令一样)并且我的提示重新出现.我的实际命令(grails help)实际上没有执行或生成输出.所以似乎错误存在的确切行是:

. "$DIRNAME/startGrails"
Run Code Online (Sandbox Code Playgroud)

这条线甚至在做什么,为什么会导致脚本失败?

我的问题

  • 有人可以确认这实际上是Grails或GVM错误,而不是我安装错误的情况吗?
  • 最重要的是,有人可以告诉我我可以做些什么来解决这个问题并让Grails尽可能快地启动并运行?

Adj*_*ion 3

我通过一些(非常痛苦的)调试解决了这个问题。

GRAILS_HOME/bin/startGrails(POSIX 脚本)中,有一行用于检查JAVA_HOME设置是否正确。

我没有按照推荐的方式安装 JDK。我不喜欢使用apt-get为我配置Java。我喜欢自己下载JDK,自己JAVA_HOME添加PATH。这就是问题的根源。

由于JAVA_HOME在我的 Ubuntu 机器上没有正确设置(因为我选择了手动/不鼓励的方法而不是方法apt-get),startGrails脚本失败了(请默默注意,Grails 团队来吧...),因为它无法访问JAVA_HOME

if [ -z "$JAVA_HOME" ] ; then
    die "JAVA_HOME environment variable is not set"
Run Code Online (Sandbox Code Playgroud)

所以我只是将其更改为:

if [ -z "$JAVA_HOME" ] ; then
    export JAVA_HOME="<value of my $JAVA_HOME var as defined in ~/.bashrc>"
Run Code Online (Sandbox Code Playgroud)

我将把这个问题保留下来,因为我显然不是唯一遇到这种情况的人。