6

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

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

从外壳,如果我执行echo $GRAILS_HOME,我得到:

/home/myuser/.gvm/grails/current

如果我 ececuteecho $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

我打开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 "$@"

我将其修改如下:

#!/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 "$@"

然后保存/退出并grails help从外壳中运行。这是我的输出:

1...
2...dirname is /home/zharvey/.gvm/grails/current/bin

输出的最后一行(“ 2...dirname is... ”)暂停 2 秒,然后我的屏幕清空(就像我发出了clear命令一样)并且我的提示重新出现。我的实际命令 ( ) 在任何时候都不会实际grails help执行或生成输出。因此,似乎存在错误的确切行是:

. "$DIRNAME/startGrails"

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

我的问题

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

3 回答 3

4

我有一个类似的问题,我的问题是我错误地设置了 JAVA_HOME 变量。虽然 JAVA 确实在我的机器上工作,但设置如下:

JAVA_HOME=/usr/lib/jvm/jdk1.8.0/bin
export JAVA_HOME
PATH=$PATH:$JAVA_HOME
export PATH

显然,当我更仔细地查看它时,我发现了我的错误并将上面的设置为:

JAVA_HOME=/usr/lib/jvm/jdk1.8.0
export JAVA_HOME
PATH=$PATH:$JAVA_HOME/bin
export PATH

只是一个细微的区别,但它现在确实可以正常工作并且命令

grails

没有像上面解释的那样默默地失败。

希望能帮助到你 !!

于 2014-08-18T09:24:22.657 回答
3

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

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

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

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

if [ -z "$JAVA_HOME" ] ; then
    die "JAVA_HOME environment variable is not set"

所以我只是将其更改为:

if [ -z "$JAVA_HOME" ] ; then
    export JAVA_HOME="<value of my $JAVA_HOME var as defined in ~/.bashrc>"

我会留下这个,因为我显然不是唯一遇到这个的人。

于 2014-04-22T22:58:11.757 回答
0

面临同样的问题。我的解决方案是sudo update-alternatives --install /usr/bin/startGrails startGrails /opt/grails-2.4.3/bin/startGrails 2

于 2014-10-15T09:25:40.817 回答