新机器上的多个 Java 可执行文件

Multiple Java Executables on New Machine

TLDR;为什么 brew/cask(或者甚至是本机安装程序)为 java 安装多个可执行文件?

系统数据:

MacOS 10.13 / 高山脉

我正在设置一台新的开发机器,在安装 java 运行 之前执行以下命令:java 并被告知找不到二进制文件。

我从这里 运行 brew cask install java。此时 java 变得可执行并且 运行 which java 在 usr/bin/java 为我提供了一个路径。不出所料,这个位置是 link 到

/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

出于好奇,我 运行:/usr/libexec/java_home 返回:

/Library/Java/JavaVirtualMachines/jdk-10.0.1.jdk/Contents/Home

相信 这是 JAVA_HOME 环境变量的典型位置。但是,当查看 java bin 指向的路径时,您会注意到位置不同。 JAVA_HOME/bin 指向 /Library 中的一个位置,而 which java 指向 System/Library 中的一个位置 我知道 Mac 计算中有一个通用规则说 /系统资源是基本的机器设置,不应该被修改,/Library 资源用于用户安装和管理的软件,但我不明白为什么我会在两个地方存储完全相同的可执行文件。

我的问题是,为什么同一个软件安装在两个不同的地方,为什么 JAVA_HOME/bin 指向一个二进制文件而 which java 指向另一个二进制文件?


提问前我使用的资源:

what does mac os /Library folder store?

Where is Oracle's (Sun's) JDK/JRE installed on Mac OS X 10.8 Mountain Lion?

这个问题是重复的,答案来自用户 bdash,他以完整而清晰的方式回答,值得称赞。感谢提供此指针的 N​​aveen Kumar。如需完整答案,请访问:

Understanding Oracle's Java on Mac

对于从 google 访问此页面的人来说,简短的回答是 /System/Library 中的项目是存根而不是真正的 java 可执行文件。 JDK 的真实位置是 /usr/libexec/java_home 暴露的位置。