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

许多使用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窗格中定义)。

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

304561 次浏览

我倾向于使用/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

参考文献:

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

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

在~/.profile中添加:

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

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

现在Java似乎安装在/Library/Java/JavaVirtualMachines

我用的是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

以上工作不再在优胜美地的图形应用!比如《月食》或者重点报道节目。(.Bash_profile, launchd.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? < / p >

我发现这个堆栈有帮助,我有同样的问题,我可以修复:

我的java路径在这里:

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

并且需要将它放入我的.bash_profile:

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

希望帮助

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

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

对于Fish Shell用户,使用类似以下的东西:alias java7 "set -gx JAVA_HOME (/usr/libexec/java_home -v1.7)"

对我来说,maven似乎处理了.mavenrc文件:

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

我确定我也是在SO上学的,只是不记得在哪里了。

创建文件~/.mavenrc

然后将其粘贴到文件中

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

测验

mvn -v

跳过终端设置,因为你提到了应用程序,永久的系统环境变量设置(适用于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(真的吗?)以适应您的需要和您的系统

我有MAC OS X(Sierra) 10.12.2

我通过以下步骤将JAVA_HOME设置为在反应本地上工作(用于Android应用程序)。

  • 打开终端(Command+R,输入终端,按ENTER键)。

  • 将以下行添加到~ / . bash_profile 出口JAVA_HOME = $ (/ usr / libexec / JAVA_HOME) < /代码> < / p > < /李>

  • 现在执行以下命令。 源~ / . bash_profile < /代码> < / p > < /李>

  • 你可以通过输入下面的命令来检查JAVA_HOME的确切值。 echo $ JAVA_HOME < /代码> < / p > < /李>

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

就是这样。

建议在设置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 10.14.6中测试工作。