【问题标题】:How do I make grails choose the right JDK?如何让 grails 选择正确的 JDK?
【发布时间】:2013-09-19 12:39:10
【问题描述】:

我使用的是 Mac OSX 10.8.5,除了 mac 的 1.6 之外,还安装了 Oracle 的 Java 1.7。 我的 JAVA_HOME 设置和路径前面的 JAVA_HOME/bin 。 当我从命令行运行 grails compile 时,我可以看到它选择的是 Java 1.6 而不是 1.7。如何让 grails 命令行选择我想要的 JDK?

➤ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home
➤ echo $PATH
/Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/bin /usr/local/share/npm/bin /Users/kbrodhagen/bin /Users/kbrodhagen/.rvm/bin /usr/bin /bin /usr/sbin /sbin /usr/local/bin /opt/X11/bin /usr/local/git/bin
➤ set -x JAVA_OPTS "-showversion"
➤ grails compile
java version "1.6.0_51"
Java(TM) SE Runtime Environment (build 1.6.0_51-b11-457-11M4509)
Java HotSpot(TM) 64-Bit Server VM (build 20.51-b01-457, mixed mode)

【问题讨论】:

    标签: grails


    【解决方案1】:

    您使用的是哪个 shell 以及您是如何设置 JAVA_HOME 的? Grails 应该尊重您的JAVA_HOME 设置,只要它对grails 命令可见,例如在bash 中您必须export 变量而不是仅仅设置它,在tcsh 中您将使用setenv 而不是set.

    $ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home
    

    您还可以从 PATH 中删除 /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/bin,因为 /usr/bin/java 将自动委托给当前 JAVA_HOME 的相应 java 命令。

    【讨论】:

    • 环境就是这样。我正在使用fish shell,并且没有在命令上设置正确的标志来导出变量。作为记录,正确的命令是(使用 -x 导出): set -x JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home
    • 如果有一种方法可以在 grails 本地而不是整个系统中进行,那就太好了...
    • @Spider 我只是在你的路径(例如~/bin/grails)的某个地方创建一个 shell 脚本,它设置 JAVA_HOME 然后委托给真正的 grails 脚本。或者对于单个项目执行grails wrapper 并编辑生成的grailsw
    【解决方案2】:

    如果您只想将 Java 版本本地化到 Grails,最好的方法是编辑以下文件,

    .gvm/bin/gvm-init.sh
    

    您可以在此文件中设置 JAVA_HOME,如下所示,

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home
    

    我的机器中有 Java 8,在这里我为 grails 设置了 Java 1.7ONLY

    【讨论】:

    • 是的,这对我有用,即使在 Ubuntu 上,我使用 alternatives 将 Java 8 定义为默认 java。我的个人资料认为我正在运行 Java 8 javac -version 返回 javac 1.8.0_45,但 grails 忽略 /usr/bin/javac 而是在 JAVA_HOME/bin 下搜索它。
    【解决方案3】:

    对于新的 SDKman 方法,您可以在 [YOUR HOME]/.sdkman/candidates/grails/[concrete version or current]/bin/grails 中导出 JAVA_HOME

    【讨论】:

      【解决方案4】:

      我需要能够在 Ubuntu 12.04 中的 Java 7/Grails 2.4.4 项目和 Java 8/Spring 4 项目之间切换,某些事情让这变得困难:

      • 在使用sudo apt-get install oracle-java8-set-default 安装它之后,我会选择set Java 8 as the default version,但这显然会创建/etc/profile.d/jdk.sh/etc/profile.d/jdk.csh,其中包含JAVA_HOMEJRE_HOME 和其他阻止我交换JDK 的环境变量。李>
      • This 有点工作,但上面的环境变量让事情变得太多了。

      最后,我从我的环境和/etc/profile.d 中的文件中删除了上述两项,现在我:

      • 如 webupd8 文章中所述,通过运行 sudo update-java-alternatives -s java-8-oracle(或 java-7-oracle)来更改 JDK;
      • 运行gvm,根据需要设置当前或默认的grails和其他工具

      看起来比它应该的更混乱,但我认为它现在可以工作了。

      【讨论】:

        【解决方案5】:

        如果您使用SDKMAN 安装Grails(即currently recommended method),您可以将已安装的任何Java 版本添加到SDKMAN,它也会为您管理它们。例如:

        sdk install java openjdk-8 /usr/lib/jvm/java-8-openjdk-amd64
        sdk use java openjdk-8
        

        请注意,这将为您的用户设置 JAVA_HOME,因此如果您不希望这样做,您可能需要考虑其他选项之一。

        $ echo $JAVA_HOME
        /home/user/.sdkman/candidates/java/current
        

        欲了解更多信息:SDKMAN local versions

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-12
          • 2019-10-24
          • 1970-01-01
          • 1970-01-01
          • 2013-01-08
          • 1970-01-01
          相关资源
          最近更新 更多