【问题标题】:Where is JAVA_HOME on macOS Mojave (10.14) to Lion (10.7)?macOS Mojave (10.14) 到 Lion (10.7) 上的 JAVA_HOME 在哪里?
【发布时间】:2011-09-29 02:59:57
【问题描述】:

Java 是最新版本 macOS 上的可选包。

然而,一旦安装,它似乎 JAVA_HOME 环境变量未正确设置

【问题讨论】:

  • 在 Mac Sierra 我有 /Library/Java/JavaVirtualMachines 有 jdk 和 System Preferences > Java 这两个有什么不同?
  • 不同的问题,谢谢
  • 不要低估 Java 安装未正确完成的可能性。如果以下优秀建议似乎都不起作用,请尝试 [重新] 安装!

标签: java macos


【解决方案1】:

安装了Java optional packageOracle JDK, 将以下行之一添加到您的 ~/.bash_profile 文件将相应地设置环境变量。

export JAVA_HOME="$(/usr/libexec/java_home -v 1.6)"
or
export JAVA_HOME="$(/usr/libexec/java_home -v 1.7)"
or
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
or simply
export JAVA_HOME="$(/usr/libexec/java_home)"

注意:如果您在 mac 上使用 brew 安装了 openjdk,请运行 sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk 以使上述操作生效

更新:基于 Jilles van Gurp response 添加了 -v 标志。

【讨论】:

  • 很高兴知道。我不得不说我对 Lion 的功能列表不太感兴趣。对于我的使用而言,似乎没有太多的增强方式......
  • 这对我不起作用。 /System/Library/Frameworks/JavaVM.framework/Home 工作。
  • 也适用于 Maverick!
  • 怎么来 /usr/libexec/java_home -V 没有显示我刚刚安装的 java 1.8 并且在 /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin 上可用
  • 对于 Java 11 和 High Sierra,导出 JAVA_HOME="$(/usr/libexec/java_home -v 11)"
【解决方案2】:

上面的内容不适用于 Amazon 的 EC2 工具,因为它需要 bin/java 等在 JAVA_HOME 下面。 /System/Library/Frameworks/JavaVM.framework/Home 确实有效。

【讨论】:

  • 是狮子吗?您是从 Apple 获得官方 Java 包,还是从 Oracle 获得 Java6/7?
  • 我相信是苹果的 Java 包。
  • @AndrewH 是的,我发现也是如此。安装苹果的Java包,发现实际库路径(比如在eclipse.ini中设置-vm):/System/Library/Java/Support/Deploy.bundle/Contents/Home/lib/javaws.jar
  • 感谢您的信息。可能是我太简单了,但是为什么 OS X 把这么简单的事情搞得一团糟?
【解决方案3】:

在 Mac OS X Lion 上,为了让 visualgc 运行,我使用了:

export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home

【讨论】:

  • 我没有得到你的建议:这与 export JAVA_HOME=/usr/libexec/java_home 有什么不同?命令 /usr/libexec/java_home 返回 /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
  • 对于 visualgc /usr/libexec/java_home 产生:位于 /usr/libexec/java_home 的 java.exe 不在 JDK 目录中。请设置并导出您的 JVMSTAT_JAVA_HOME 环境变量以引用包含 Sun J2SE 1.5.0 JDK(不是 JRE)的目录,然后重试。
【解决方案4】:

/usr/libexec/java_home 不是目录而是可执行文件。它输出当前配置的 JAVA_HOME 并且实际上并没有改变它。这就是 Java Preferences 应用程序的用途,在我的情况下,它似乎已损坏并且实际上并没有正确更改 JVM。它确实列出了 1.7 JVM,但我可以切换/取消切换和拖放我想要的所有内容,而无需实际更改 /usr/libexec/java_home 的输出。

即使在 Lion 上从 Oracle 安装 1.7.0 u6 并将其设置为首选项中的默认值后,它仍然返回苹果 1.6 java 主页。唯一对我有效的修复方法是手动设置 JAVA_HOME:

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

至少以这种方式从命令行运行时它将使用 1.7。 /usr/libexec/java_home依然坚持1.6。

更新Understanding Java From Command Line on OSX 对它的工作原理有更好的解释。

export JAVA_HOME=`/usr/libexec/java_home -v 1.7` 

是这样做的方法。请注意,将其更新到 1.8 就可以了。

【讨论】:

【解决方案5】:

更好(更可升级)的方法是使用以下方法:

/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home

这也适用于 AWS,因为它在 Home 下面有 bin

【讨论】:

  • 有点不同意“更可升级”的说法 /usr/libexec/java_home 是一个返回路径的 exe,而不是固定路径。除了取决于你使用的 jvm 版本,上面的路径不会匹配
【解决方案6】:

这个答案与Mountain Lion有关,与Lion无关。我需要为 AWS 命令​​行工具执行此操作。根据the AWS docs,运行which java会返回/usr/bin/java

所以,我在我的.bashrc 中设置了JAVA_HOME=/usr

显然,/usr/bin/java 是一个指向 /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java 的符号链接,这使得一切正常。

更新

正如下面评论中提到的,当JAVA_HOME 环境变量将被 AWS 命令​​行工具以外的其他东西使用时,这个 JAVA_HOME 值不是一个理想的解决方案。不过,如他们的文档中所述,它适用于 AWS 命令​​行工具。

【讨论】:

  • 重点是,/usr 不是正确的 JAVA_HOME 目录。找到bin/java就可以了。但有时构建器(ant、make)使用 JAVA_HOME 来引用 lib/tools.jar 中的 javac 编译器,您的解决方案将失败
  • 啊,谢谢你的信息。你说的对。将更新答案。
【解决方案7】:

对我来说,Mountain Lion 10.8.2,投票最多的解决方案不起作用。 我通过 Oracle 和自制软件安装了 jdk 1.7。

我的解决方案来自我从自制软件安装的 hadoop 的 hadoop-env.sh 文件。 我在 ~/.bash_profile 中添加以下语句,它就可以了。

export JAVA_HOME="$(/usr/libexec/java_home)"

此解决方案也适用于从 Oracle 安装 Java 1.8 的 OS X Yosemite。

【讨论】:

  • 如果您从 Apple 安装了 java 6,它会工作的。这里的重点是您使用的是 oracle java 7。
  • 这在 Mavricks 上非常适合我,但 java_home 脚本的位置不同。 export JAVA_HOME="$(/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home)"
  • 我尝试在 mac Yosemite 上设置 maven,这种设置 JAVA_HOME 的方式适合我。
  • 在 Sierra 10.12 和 Java 8 上为我工作
【解决方案8】:

升级我的 Mac OS 后遇到了同样的问题,以下对我有用:

  1. cmd>vi ~/.bash_profile

  2. 添加/更新 JAVA_HOME 的行: export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_15.jdk/Contents/Home"

  3. cmd>source ~/.bash_profile 或打开一个新终端

我认为 jdk 版本可能会有所不同,所以请使用 /Library/Java/JavaVirtualMachines/ 下的版本

【讨论】:

    【解决方案9】:

    1.7.0_21-b12 等较新的 Oracle JVM 似乎安装在此处:

    /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home

    【讨论】:

    • 确实 - 并且 /usr/libexec/java_home 工具会为这些 Java 版本返回错误。
    • 这是下载 v1.7 JRE 后唯一对我有用的答案
    • 这是安装 JRE 时的路径。大多数评分答案和 cmets 都是关于 JDK 的。不是一回事。
    【解决方案10】:

    我的做法是:

    .bashrc

    export JAVA6_HOME=`/usr/libexec/java_home -v 1.6`
    export JAVA7_HOME=`/usr/libexec/java_home -v 1.7`
    export JAVA_HOME=$JAVA6_HOME
    
    # -- optional
    # export PATH=$JAVA_HOME/bin:$PATH
    

    这使得在 J6 和 J7 之间切换非常容易

    【讨论】:

    • @AdonisSMU 你找到解决方案了吗?
    【解决方案11】:

    对于 Mac OS X 10.9,我从 Oracle 安装了最新版本的 JRE,然后将 JAVA_HOME 重置为 /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home。

    我确信有更好的方法,但让我启动并运行。

    hughsmac:~ hbrien$ echo $JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

    【讨论】:

    • 在全新的 Mavericks 安装中,这是唯一对我有用的解决方案。必须将 sqldeveloper 指向位于此处的 jdk 主页(如 this thread 所建议的那样才能使其工作。
    【解决方案12】:

    对于 OS X,您可以这样做:

    export JAVA_HOME=`/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home`
    

    【讨论】:

    • 值得注意的是,HFS+ 不区分大小写。
    【解决方案13】:

    以下内容对我有用。我在安装了 Java 8 的 OSX Yosemite 上使用 ZSH。

    以下命令 /usr/libexec/java_home 发出 JDK home 的路径:

    /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

    在你的~/.zshrc

    export JAVA_HOME = "/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home"
    

    【讨论】:

    • 与提议的解决方案有何不同?
    • 这与建议的解决方案没有什么不同。此解决方案专门针对使用 ZSH、Java 8 和 OSX Yosemite 的用户。
    • 确认在 OSX Yosemite 上安装了 java 1.8 的工作就像一个魅力,干杯伙伴。
    • 通用解决方案适用于 Java 8、zsh 和 Yosemite。
    【解决方案14】:

    如果您需要在 Mac OS X (Yosemite) 下拥有多个版本的 JDK,添加一些脚本以在它们之间自动切换可能会有所帮助。

    您要做的是编辑您的 ~/.bash_profile 并添加以下内容:

    function setjdk() {
      if [ $# -ne 0 ]; then
       removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
       if [ -n "${JAVA_HOME+x}" ]; then
        removeFromPath $JAVA_HOME
       fi
       export JAVA_HOME=`/usr/libexec/java_home -v $@`
       export PATH=$JAVA_HOME/bin:$PATH
      fi
     }
     function removeFromPath() {
      export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
     }
    setjdk 1.7
    

    脚本所做的是首先删除 PATH 中的其他 JDK 版本,这样它们就不会干扰我们的新 JDK 版本。然后它巧妙地使用了 /usr/libexec/java_home,这是一个列出已安装 JDK 版本的命令。 -v 参数告诉 java_home 以提供的版本返回 JDK 的路径,例如 1.7。我们还更新了 PATH 以指向新发现的 JAVA_HOME 目录的 bin 目录。最后我们可以简单地使用

    setjdk 1.7
    

    选择最新安装的 JDK 版本的 1.7 分支。要选择特定版本,您只需执行即可

    setjdk 1.7.0_51
    

    相反。运行 /usr/libexec/java_home -V 以获取有关如何选择版本的更多详细信息。

    附:保存后不要忘记source ~/.bash_profile

    【讨论】:

      【解决方案15】:

      OSX Yosemite、ZSH 和 Java SE 运行时环境 8,我必须:

      $ sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands /System/Library/Frameworks/JavaVM.framework/Versions/Current/bin

      并在 ~/.zshrc 中将 JAVA_HOME 更改为 export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/Current"

      【讨论】:

        【解决方案16】:

        对于 mac 用户。 java 8应该添加

        export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
        # JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
        

        Java 6:

        export JAVA_HOME=`/usr/libexec/java_home -v 1.6`
        # JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
        

        参考:http://qiita.com/seri_k/items/e978c1339ce51f13e297

        【讨论】:

          【解决方案17】:

          对于 Mac Yosemite,

          JDK 1.7.0_xx 正在使用

          $ ls -ltar /usr/bin/java
          /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
          
          JAVA_HOME
          
          /Library/Java/JavaVirtualMachines/jdk1.7.0_xx.jdk/Contents/Home
          

          【讨论】:

          • 您能否添加更多信息以使此答案有用。
          【解决方案18】:

          以上答案都没有帮助我。我想所有的答案都是老的OS X

          对于 OS X Yosemite 10.10,请按照以下步骤操作

          使用您喜欢的文本编辑器打开:~/.bash_profile

          //This command will open the file using vim
          $ vim ~/.bash_profile
          

          在文件中添加以下行并保存(: 后跟“x”代表 vim):

          export JAVA_HOME=$(/usr/libexec/java_home)
          

          然后在终端输入以下两条命令来查看输出:

          $ source ~/.bash_profile
          
          $ echo $JAVA_HOME
          

          在第二行中,您正在更新.bash_profile 文件的内容。

          【讨论】:

          • 我想我得到了你的 pb - 你使用引号而不是反引号 ' vs `
          • 不,我使用了正确的引号,而是尝试复制粘贴,但没有成功。我更新了我的答案,因为它对我有用。
          • @OlivierRefalo 我可以看到你已经用双引号(“)更新了你的答案。但即使没有引号,它也可以工作。
          • 非常感谢。它在优胜美地 10.10 中对我有用
          • 这是唯一有效的解决方案。通过任何其他解决方案添加路径,将临时添加,直到您终止终端,并且路径消失。要永久添加,路径必须保存在 .bash_profile 文件中。同时,为了简单起见,我使用 nano 而不是 vim。
          【解决方案19】:

          任何使用澳大利亚税务局 (ATO) 的 AUSKEY 的人都应卸载 AUSKEY。 这解决了我的 JAVA_HOME 问题。

          MAC 用户也不再需要它。啊!

          【讨论】:

            【解决方案20】:

            Java 9 的更新和一些简洁的别名。

            .bash_profile:

            export JAVA_HOME8=`/usr/libexec/java_home --version 1.8`
            export JAVA_HOME9=`/usr/libexec/java_home --version 9`
            

            注意,最新版本是9,而不是1.9

            设置激活的 Java:

            export JAVA_HOME=$JAVA_HOME8
            export PATH=$JAVA_HOME/bin:$PATH
            

            在不同版本之间切换的一些额外别名:

            alias j8='export JAVA_HOME=$JAVA_HOME8; export PATH=$JAVA_HOME/bin:$PATH'
            alias j9='export JAVA_HOME=$JAVA_HOME9; export PATH=$JAVA_HOME/bin:$PATH'
            

            终端测试:

            % j8
            % java -version
            java version "1.8.0_121"
            Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
            Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
            % j9
            % java -version
            java version "9"
            Java(TM) SE Runtime Environment (build 9+181)
            Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
            

            编辑:Java 10 更新

            export JAVA_HOME10=`/usr/libexec/java_home --version 10`
            alias j10='export JAVA_HOME=$JAVA_HOME10; export PATH=$JAVA_HOME/bin:$PATH'
            

            编辑:Java 11 更新

            export JAVA_HOME11=`/usr/libexec/java_home --version 11`
            alias j11='export JAVA_HOME=$JAVA_HOME11; export PATH=$JAVA_HOME/bin:$PATH'
            

            【讨论】:

              【解决方案21】:

              我在 High Sierra 10.13.4 上使用 Fish shell,并通过 Brew 安装了 Java。

              它不是自动设置的,所以在我运行的系统上设置correctly

              set -U JAVA_HOME (/usr/libexec/java_home)
              

              【讨论】:

                【解决方案22】:

                只需在netbeans.conf文件中设置1.8 jdk版本的java_home即可:

                /Applications/NetBeans/NetBeans 8.2.app/Contents/Resources/NetBeans/etc/netbeans.conf
                

                取消注释行:

                netbeans_jdkhome="path/to/jdk"
                

                并在我的情况下为您的 1.8 jdk 设置路径:

                netbeans_jdkhome="/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home"
                

                这种方法让你在 mac os 上拥有多个 jdk 版本

                【讨论】:

                  【解决方案23】:

                  适用于 macOS Mojave 10.14.1 和 JAVA 11.0.1 我将配置文件设置为

                  export JAVA_HOME=$(/usr/libexec/java_home)
                  

                  在终端输入确认:

                  $JAVA_HOME/bin/java -version
                  
                  java version "11.0.1" 2018-10-16 LTS
                  Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
                  Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
                  

                  【讨论】:

                  • 适用于 Catalina。泰
                  【解决方案24】:

                  我必须明确地将它设置为我的 Macbook air 上的确切路径。

                  后续步骤:

                  1. 尝试echo $JAVA_HOME(如果设置了它会显示路径),如果没有,尝试使用sudo find /usr/ -name *jdk搜索它
                  2. 使用 - sudo nano ~/.bash_profile 编辑 Bash p
                  3. 添加到 JAVA Home 的确切路径(使用上面第 2 步中的路径) export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home
                  4. 保存并退出
                  5. 检查 JAVA_Home 使用 - echo $JAVA_HOME

                  我在装有 JAVA 8 的 Macbook Air 上运行 MACOS MOJAVE - 10.14.2 (18C54)

                  【讨论】:

                    【解决方案25】:

                    对于 Mac 上的 Fish 终端用户(我相信它也可以在 Linux 上使用),这应该可以工作:

                    set -Ux JAVA_8 (/usr/libexec/java_home --version 1.8)
                    set -Ux JAVA_12 (/usr/libexec/java_home --version 12)
                    set -Ux JAVA_HOME $JAVA_8       //or whichever version you want as default
                    

                    【讨论】:

                      【解决方案26】:

                      对于 Java 11 (JDK 11),可以使用以下命令定位它:

                      /usr/libexec/java_home -v 11
                      

                      【讨论】:

                        猜你喜欢
                        • 2019-03-02
                        • 1970-01-01
                        • 2019-03-14
                        • 1970-01-01
                        • 1970-01-01
                        相关资源
                        最近更新 更多