在macOS X 10.6上,我应该如何设置JAVA_HOME环境变量?

462

很多使用 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偏好设置中定义的那样)。

但是应该使用哪一个呢,或者使用任何一个都可以吗?


15个回答

881

我刚刚将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的人,可以像这样添加它。

如果您的路径中没有java_home,请按照以下方式添加。

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

参考资料:


8
雪豹系统仍然具有 /usr/libexec/java_home。谢谢。 - Robert Christie
59
仍然适用于Mavericks。 - Pascal
43
仍适用于Yosemite。 ;) - Geoffrey Wiseman
10
High Sierra 10.13.1 检测! - Crysfel
11
仍然适用于Mojave。 - Keuha
显示剩余18条评论

42

此外,将你的PATH设置为反映JDK也是很有趣的。在添加JAVA_HOME后(可以使用'mipadi'提供的示例完成):

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

还需在~/.profile中添加以下内容:

export PATH=${JAVA_HOME}/bin:$PATH

P.S.: 对于OSX系统,我通常使用HOME目录下的.profile而不是.bashrc。


对于运行默认 bash 的 OSX,我通常使用 bash .bash_profile — 你为什么要使用通用的 .profile 呢? - Lee Goddard
1
由于.profile是通用的,所以它适用于sh或者bash,而.bash_profile则仅适用于bash。此外,这将从使用.bash_profile的应用程序(例如MacPorts)中隔离出设置。但你可以安全地使用其中任何一个。更多信息请参见这里 - lucasarruda
1
提醒一下,你提供的链接证实了我的怀疑,在bash(即默认情况下),使用.bash_profile会覆盖.profile - Lee Goddard
@LeeGee 是的,它这样做是因为 .bash_profile 是特定的,而 .profile 则是通用的,适用于所有 sh 变体。 - lucasarruda
1
由于OS/X在您的/usr/bin中放置了一个到java的链接,因此不需要显式地将$JAVA_HOME添加到您的路径中。 - Zaphod

23

我使用的是MAC OS X(Sierra) 10.12.2操作系统。

为了在React Native(用于Android应用程序开发)上工作,我按照以下步骤设置了JAVA_HOME

  • 打开终端(Command+R,输入Terminal,回车)。

  • 将以下行添加到~/.bash_profile文件中。 export JAVA_HOME=$(/usr/libexec/java_home)

  • 现在运行以下命令。 source ~/.bash_profile

  • 您可以通过输入以下命令来检查JAVA_HOME的确切值。 echo $JAVA_HOME

返回的值(输出)将类似于以下内容。 /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

就这样了。


这很有帮助,谢谢。但是我认为您漏掉了最后一步,即在 .bashrc / .bash_profile / .zshrc 等中将 JAVA_HOME 设置为返回值。如果我错了,请纠正我。 - TheProletariat
2
不是必需的。在我的情况下,$JAVA_HOME 指的是 $(/usr/libexec/java_home),而 $(/usr/libexec/java_home) 在系统内部被指定为 /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home - hygull
1
明白了,在我的情况下是必需的。谢谢。 - TheProletariat

15

我使用的是 Mac OS 10.6.8 操作系统。

对我来说最简单的解决方案就是直接输入:

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

为了测试它是否起作用,放入

$ echo $JAVA_HOME

它展示了

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

您也可以进行测试。

$ which java

14

现在,Java似乎安装在/Library/Java/JavaVirtualMachines中。



9

我倾向于使用/Library/Java/Home。首选项面板的工作方式应该会与您喜欢的版本保持最新。


请检查 /bin 目录是否指向 /Library/java 而不是 /System/Library/..,因为后者可能已经过时。 - JRun
1
这已经不准确了。在OS X 10.5及更高版本中,请使用/usr/libexec/java_home来查找路径。 - Kristopher Johnson

8

在 YOSEMITE 系统中,上述方法已经不能用于图形化应用程序了!比如 Eclipse 或者任何通过 Spotlight 启动的应用程序。(.bash_profile 和 launchd.conf 只对终端会话有效。) 在启动 Eclipse 之前,打开一个终端窗口,并输入以下命令:

launchctl setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

(使用您的安装路径!也许可以使用$(/usr/libexec/java_home)代替完整路径。)

在这里查看有关永久解决方案的完整优秀文章: 在OS X Yosemite / El Capitan / macOS Sierra中通过launchd.conf设置环境变量不再起作用?


4

创建文件~/.mavenrc

然后将以下内容粘贴到文件中

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

测试

mvn -v


1
我喜欢这种方法,因为它允许我在 .mavenrc 文件中轻松更改 Java 版本。 - Spindizzy

3

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

$ echo $SHELL
/bin/bash

如果您的默认终端是Bash,则应使用@hygull的方法,如果您的默认终端是Z Shell,则应在~/.zshenv文件中设置以下环境变量:/bin/zsh
export JAVA_HOME="$(/usr/libexec/java_home)"

同样地,对于没有提到的任何其他终端类型,您应该在其各自的终端环境文件中设置环境变量。

此方法已在macOS Mojave Version 10.14.6上测试通过。


2
我找到了这个 帖子 来帮助解决问题。我遇到了相同的问题,但是通过以下方法来解决:
我的Java路径在这里: /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home 需要将它放入我的.bash_profile文件中: export JAVA_HOME=\"/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home\" 希望可以帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接