我应该如何在OSX上设置JAVA_HOME

时间:2009-08-28 19:17:59

标签: java macos configuration

许多使用shell脚本配置其环境的Java应用程序使用JAVA_HOME环境变量来启动正确版本的Java,找到JRE JAR等等。

在OSX 10.6上,以下路径似乎对此变量

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

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

但是应该使用哪一个 - 或者可以使用它们中的任何一个?

15 个答案:

答案 0 :(得分:819)

Snow Leopard还有/usr/libexec/java_home吗?在10.5上,我只是将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

答案 1 :(得分:35)

此外,设置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

答案 2 :(得分:19)

我正在使用 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

就是这样。

答案 3 :(得分:14)

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

答案 4 :(得分: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

答案 5 :(得分:9)

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

答案 6 :(得分: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)而不是完整路径。)

在此处查看有关永久解决方案的完整优秀文章: Setting environment variables via launchd.conf no longer works in OS X Yosemite/El Capitan/macOS Sierra?

答案 7 :(得分:2)

我发现这个stack有帮助,我遇到了同样的问题,我可以解决这个问题:

我的java路径在这里:

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

并且需要加入我的.bash_profile

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

希望帮助

答案 8 :(得分: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(真的吗?)以满足您的需求和系统

答案 9 :(得分:2)

建议通过以下命令在设置 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 中进行了测试。

答案 10 :(得分:1)

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

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

答案 11 :(得分:1)

对我来说,maven似乎可以解决var arr = [ {email: 'matthew@gmail.com', id: 10} ] var arr2 = [ {email: 'matthew@gmail.com', id: 10}, {email: 'matthew@gmail.com', id: 13} ] mergedArray = arr.concat(arr2); console.log( [...new Set(mergedArray)] ); // output would be: // [ // {email:'matthew@gmail.com', id: 10}, // {email:'matthew@gmail.com', id: 13} // ]文件:

.mavenrc

我确定我也把它拿起来,只是不记得在哪里。

答案 12 :(得分:1)

创建文件~/.mavenrc

然后将其粘贴到文件

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

测试

mvn -v

答案 13 :(得分:0)

在过去的20年中,Java和MacOS的不同版本在JAVA_HOME上有不同的位置。所以现在有一个命令:

 $ /usr/libexec/java_home

这将返回“默认” Java安装的主目录(/ usr / bin / java指向的目录)。 因此,您可以这样设置JAVA_HOME:

$ export JAVA_HOME=`/usr/libexec/java_home`

如果您关心Java的特定版本,请使用java_home作为参数。

$ /usr/libexec/java_home -v 1.8

参考

答案 14 :(得分:-1)

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