为什么我在我的 MAC OS X 10.11 上看不到 JAVA_HOME 路径?

17

我正在尝试在我的MAC OS X 10.11(El Capitan)上运行一个JAVA应用程序。

我使用这个链接来设置我的MAC OS X 10.11上的JAVA_HOME。

我可以运行以下命令:
java -version
which java

然而,当我进入MAC上的Terminal应用程序并键入echo $JAVA_HOME时,我什么也看不到。 为什么呢? 这是不是意味着我的JAVA_HOME没有正确设置?

4个回答

37

在哪里定义

首先,我们必须明确地确定在哪里设置JAVA_HOME。简单来说,您可以在两个文件中定义它:~/.bashrc~/bash_profile。默认情况下,前者对被称为“交互式非登录shell”的内容执行,而后者用于“登录shell”。 "登录shell"就是您期望的一样:通过命令行登录后启动的shell。 "交互式非登录shell"是从GUI中启动的shell。因此,根据这个,我们应该将export语句放入~/.bashrc

副记:尽管OS X的“终端”应用程序同时读取上述两个文件,但这不是默认行为,因此不应将其视为默认行为。这就是我写解释的原因。

需要定义什么

您需要在~/.bashrc文件中导出JAVA_HOME,以便每次打开shell时都设置变量。在OS X上,Java开发工具包和运行时环境已经存储在/Library/Java/JavaVirtualMachines/下相当长一段时间了。看一下那里。 这是我机器上的情况:

/Library/Java/JavaVirtualMachines/
├── jdk1.7.0_45.jdk
├── jdk1.8.0_20.jdk
├── jdk1.8.0_25.jdk
└── jdk1.8.0_51.jdk

子文件夹的外观类似于这样

jdk1.7.0_45.jdk/
└── Contents
    ├── Home
    ├── Info.plist
    └── MacOS

我们已经得到了。所以如果你想指向JDK 1.7.0_45,你需要将以下语句放入你的.bashrc文件中。

export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home"
为了确保调用正确版本的Java二进制文件,您还应该在上述语句之后的某个位置添加以下内容:
export PATH=$JAVA_HOME/bin:$PATH

1
你没有回答这里提出的第一个问题。 - Peter Verhas
@PeterVerhas 哦,好吧,我隐含了:由于它没有在正确的点文件中导出,因此它不可用。要使环境变量可用,需要设置它;) - Markus W Mahlberg
FYI - 这在High Sierra上不起作用。我需要指定jdk1.8,并安装了java 9。唯一的解决方案是删除Java 9。 - eimmer
@eimmer,这并不与问题的基本答案相抵触。降级Java是完全不同的事情。 - Markus W Mahlberg
@MarkuswMahlberg 这个答案在我的 High Sierra 上不起作用,所以我想让大家知道这个答案可能不适用于他们。我会继续深入挖掘,看看能否找到更多信息... - eimmer
所以,在HighSierra上可以工作,但如果您的默认终端是ZSH,则无法工作... - eimmer

7

2
您会在许多关于如何在OSX中设置JAVA_HOME的答案上找到许多答案,但很难找到一个回答问题是否需要设置JAVA_HOME。
为什么呢?这是否意味着我的JAVA_HOME没有正确设置?
在OSX上,设置JAVA_HOME环境变量是可选的。JRE和JDK安装程序不提供设置JAVA_HOME; 因此,不设置JAVA_HOME是完全可以的。

0
如果由于某些原因想要使用已停止支持的 jdk 1.6,而 Apple 已经停止支持该版本。在更新 Mac OS 后,该版本将被移除。 您仍然可以从此页面获取 jdk 1.6:https://support.apple.com/kb/DL1572?locale=zh_CN 安装 jdk 1.6 后,请记得确认在 ~/.bash_profile 等中导出系统变量 $JAVA_HOME 的正确目录。对我而言,它是“/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home”。

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