我应该在OSX上设置JAVA_HOME

许多使用shell脚本来configuration其环境的Java应用程序使用JAVA_HOME环境variables来启动正确版本的Java,findJRE JAR等等。

在OSX 10.6上,以下path似乎对此variables有效

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

其中一些是实际当前VM的符号链接(如“Java首选项”窗格中所定义)。

但是应该使用哪一个,还是可以使用它们中的任何一个?

Snow Leopard还有/usr/libexec/java_home吗? 在10.5上,我只是将JAVA_HOME设置为该命令的输出,该命令应该为您提供在Java首选项中指定的Javapath。 这里是我的.bashrc文件的一个片段,它设置了这个variables:

 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) 

对于那些在你的path中没有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)

也join〜/ .profile中:

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

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

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

我在Mac OS 10.6.8上

最简单的解决scheme适用于我,只是放在

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

要testing它是否有效,请input

 $ echo $JAVA_HOME 

表明

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

你也可以testing

 $ which java 

我倾向于使用/Library/Java/Home 。 偏好设置窗格的工作方式应该与您的首选版本保持同步。

上述工作不再适用于YOSEMITE for GRAPHICAL APPLICATIONS! 像日食,或任何开始与Spotlight。 (.bash_profile,launchd.conf仅适用于terminal会话。)在启动eclipse之前,只需打开一个terminal窗口,并发出以下命令:

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

(使用你的安装path!也许可以使用$(/ usr / libexec / java_home)而不是完整的path。)

查看有关永久性解决scheme的整篇文章: 通过launchd.conf设置环境variables不再适用于OS X Yosemite / El Capitan / macOS Sierra?

我有MAC OS X(Sierra)10.12.2

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

  • 打开terminal(命令+ R,键入terminal,点击ENTER)。

  • 将以下行添加到〜/ .bash_profileexport JAVA_HOME=$(/usr/libexec/java_home)

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

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

返回的值(输出)将如下所示。 /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

而已。

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

我的javapath在这里:

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

并需要把我的.bash_profile

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

希望帮助

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

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

对我来说maven似乎工作.mavenrc文件:

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

我确定我也是捡起来的,只是不记得在哪里。

跳过terminal设置,因为你提到的应用程序,永久的系统环境variables设置(适用于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(真的?)以适应您的需求和您的系统

创build文件~/.mavenrc

然后将其粘贴到文件中

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

testing

mvn -v

对于Fish Shell用户,使用如下所示: alias java7 "set -gx JAVA_HOME (/usr/libexec/java_home -v1.7)"