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


436

许多使用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

其中一些是指向实际当前虚拟机的符号链接(在Java Preference窗格中定义)。

但是,应该使用哪一个?或者可以使用其中任何一个?


Answers:


849

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

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

我没有遇到过任何与该技术有关的问题。

有时我确实必须将JAVA_HOMEJava 的值更改为早期版本。例如,我要维护的一个程序在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

参考文献


20
山狮也有它
sghill 2012年

57
仍然有效小牛
帕斯卡尔

42
仍然对优胜美地有效。;)
Geoffrey Wiseman 2014年

42
埃尔卡皮坦。校验!
gattshjoty 2015年

10
高山脉10.13.1检查!!
Crysfel

40

另外,设置您的PATH以反映JDK也很有趣。添加JAVA_HOME之后(可以使用'mipadi'引用的示例来完成):

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

还要在〜/ .profile中添加:

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

PS:对于OSX,我通常在HOME目录中使用.profile而不是.bashrc


对于运行默认bash的OSX,我通常使用bash- .bash_profile为什么要使用泛型.profile
LeeGee 2014年

1
由于.profile是通用的,因此它可以与sh或一起使用bash,而对.bash_profile则是专有的bash。而且,这会将设置与使用的应用隔离开来.bash_profile,例如MacPorts。但是您可以安全地使用两者中的任何一个。在此处
lucasarruda 2014年

1
-仅供参考,您提供的链接证实了我的怀疑,即在bash(即默认情况下)下使用.bash_profile替代.profile
LeeGee 2014年

@LeeGee是的,并且这样做是因为所有变体.bash_profile都是特定的,而是.profile通用的sh
lucasarruda 2014年

1
由于OS / X放一个链接到java/usr/bin不应该有必要明确添加$JAVA_HOME到您的路径。
扎克

20

我正在使用MAC OS X(Sierra)10.12.2

我按照以下步骤将JAVA_HOME设置为可在React Native(适用于Android应用程序)上使用。

  • 打开终端(Command + R,键入Terminal,然后按Enter)。

  • 将以下行添加到〜/ .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

而已。


这很有帮助,谢谢。但是我相信您错过了最后一步,该步骤是将JAVA_HOME设置为.bashrc / .bash_profile / .zshrc /等中的返回值。如果我弄错了,请更正我。
无产阶级

2
不需要。就我而言,$JAVA_HOME是指$(/usr/libexec/java_home)$(/usr/libexec/java_home) 被内部称为/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home由系统。
Hygull

1
得到它了。在我的情况下是必需的。谢谢。
无产阶级'18

13

我在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


9

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


/ bin 并检查它是否指向/ Library / java而不是/ System / Library / ..,因为它可能已过时。
JRun,2014年

1
这不再准确。在OS X 10.5和更高版本上,使用/ usr / libexec / java_home查找路径。
克里斯托弗·约翰逊

8

以上内容在YOSEMITE图形应用程序中不再有效!例如eclipse或任何以Spotlight开头的东西。(.bash_profile,launched.conf仅适用于终端会话。)在开始eclipse之前,只需打开终端窗口,并发出以下命令:

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

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

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


2

我发现此堆栈有帮助,我遇到了同样的问题,可以解决:

我的Java路径在这里:

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

并且需要放入我的.bash_profile

export JAVA_HOME=\"/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home\"

希望帮助


2

由于您提到了应用程序,因此跳过了终端设置,设置了永久性系统环境变量(适用于macOS Sierra;也应适用于El Capitan):

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(真的吗?)以满足您的需要和您的系统


1

如其他答案所述,找到Java主目录的正确方法是使用/usr/libexec/java_home

官方文档在Apple的技术问答QA1170:OS X上的重要Java目录中https : //developer.apple.com/library/mac/qa/qa1170/_index.html


这是重复的!
富兰克林于

我认为包含指向Apple官方文档的链接使其不再多余。但是,如果是这样,正确的操作是将其标记为“重复”,而不是发表评论。
克里斯托弗·约翰逊

我发表评论是因为我无法将答案标记为重复。堆栈溢出仅允许用户将问题标记为重复(不幸的是)。该链接很有帮助,但是我认为对当前答案进行注释(或者,因为您已经具备此功能,所以可以使用链接对其进行编辑)会更好,因为它将所有有用的信息集中在一个答案中。我认为,在某些地方,Stack Overflow宁愿修正当前答案而不是编写新答案。
富兰克林于

1

对我来说,maven似乎可以处理该.mavenrc文件:

echo "export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)" > ~/.mavenrc

我敢肯定,我也是这么做的,只是不记得在哪里。


1

建立档案 ~/.mavenrc

然后将其粘贴到文件中

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

测试

mvn -v


我喜欢这种方法,因为它使我可以轻松地在.mavenrc文件中更改Java版本。
Spindizzy

1

建议通过以下命令在设置JAVA_HOME环境变量之前检查默认的终端外壳

$ echo $SHELL
/bin/bash

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

如果默认终端为/ bin / zsh(Z Shell),则应在〜/ .zshenv文件中设置以下环境变量,其内容如下:

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

同样,任何其他上述未提及的终端类型,都应在其各自的终端环境文件中设置环境变量。

此方法在macOS Mojave版本10.14.6中进行了测试。


-1

对于Fish Shell用户,请使用以下内容: alias java7 "set -gx JAVA_HOME (/usr/libexec/java_home -v1.7)"

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.