许多使用shell脚本配置环境的Java应用程序都使用JAVA_HOME环境变量来启动正确的Java版本、定位JRE jar,等等。

在macOS X 10.6中,以下路径似乎对该变量有效

/Library/Java/Home
/System/Library/Frameworks/JavaVM.framework/Home
/System/Library/Frameworks/JavaVM.framework/Versions/Current

其中一些是到实际当前VM的符号链接(在Java Preference窗格中定义)。

但是应该使用哪一种——或者可以使用其中任何一种吗?


当前回答

跳过终端设置,因为你提到了应用程序,永久的系统环境变量设置(适用于macOS Sierra;也适用于酋长石油公司):

launchctl setenv JAVA_HOME $(/usr/libexec/java_home -v 1.8)

(这将把JAVA_HOME设置为最新的1.8 JDK,有可能你已经进行过多次更新,例如javac 1.8.0_101, javac 1.8.0_131) 当然,可以将1.8更改为1.7或1.6(真的吗?)以适应您的需要和您的系统

其他回答

建议在设置JAVA_HOME环境变量前检查默认终端shell,使用如下命令:

$ echo $SHELL
/bin/bash

如果您的默认终端是/bin/bash (Bash),那么您应该使用@hygull方法

如果您的默认终端是/bin/zsh (Z Shell),那么您应该在~/中设置这些环境变量。Zshenv文件,内容如下:

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

类似地,上面没有提到的任何其他终端类型,都应该在其各自的终端env文件中设置环境变量。

此方法在macOS Mojave Version 10.14.6中测试。

我有MAC OS X(Sierra) 10.12.2。

我按照以下步骤设置JAVA_HOME在React Native(Android应用程序)上工作。

打开终端(Command+R,输入终端,按ENTER键)。 向~/.bash_profile添加以下行。 出口JAVA_HOME = $ (/ usr / libexec / JAVA_HOME) 现在运行以下命令。 源~ / . bash_profile 您可以通过键入以下命令来检查JAVA_HOME的确切值。 echo $ JAVA_HOME

返回的值(输出)如下所示。 /图书馆/ Java / Home / JavaVirtualMachines / jdk1.8.0_131.jdk /内容

就是这样。

跳过终端设置,因为你提到了应用程序,永久的系统环境变量设置(适用于macOS Sierra;也适用于酋长石油公司):

launchctl setenv JAVA_HOME $(/usr/libexec/java_home -v 1.8)

(这将把JAVA_HOME设置为最新的1.8 JDK,有可能你已经进行过多次更新,例如javac 1.8.0_101, javac 1.8.0_131) 当然,可以将1.8更改为1.7或1.6(真的吗?)以适应您的需要和您的系统

我倾向于使用/Library/Java/Home。首选项窗格的工作方式应该与您的首选版本保持一致。

我只是将JAVA_HOME设置为该命令的输出,它将为您提供Java首选项中指定的Java路径。下面是我的.bashrc文件中的一个片段,它设置了这个变量:

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

我用这种技术还没有遇到过任何问题。

有时我必须将JAVA_HOME的值更改为Java的早期版本。例如,我维护的一个程序需要在OS X上使用32位Java 5,因此在使用该程序时,我通过运行以下命令来设置JAVA_HOME:

export JAVA_HOME=$(/usr/libexec/java_home -v 1.5)

对于那些在路径中没有java_home的人,像这样添加它。

sudo ln -s /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home /usr/libexec/java_home

引用:

Oracle解释了java_home命令 一篇关于在Spring Tool Suite (Eclipse . JDK)中配置JDK的文章 2019)在MacOS上