Java 控制面板和命令行在 Mac OS X 10.9.5 上显示不同的 Java 1.7 版本。这是怎么回事?

Java Control Panel and command line show different Java 1.7 versions on Mac OS X 10.9.5. What's up?

运行 java_home 显示:

> /usr/libexec/java_home -verbose
Matching Java Virtual Machines (1):
    1.7.0_45, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home

但是 Java 控制面板显示:

什么给了?谁能解释一下?

如果您通过 Java 使用 jdk-7uNN-macosx-x64.dmg,它将在 /Library/Java/JavaVirtualMachines/ 中安装 jdk,在 /Library/Internet\ Plug-Ins/ 中安装 jre

在命令行中,运行 java 指向 /Library/Java/JavaVirtualMachines/jdk1.7.0_NN.jdk/Contents/Home/bin/java。另一方面,Java控制面板指向/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java,会自动更新。

基本上,Mac OS X 开始时没有任何 Java,如果任何已安装的应用程序或网站需要 Java,它允许您安装一个 Java JRE.

JRE 是为普通的非程序员用户安装的。它是一个运行时环境,没有关联的开发工具,但包含 Java Webstart。它还带有一个控制面板,允许用户控制安全、更新等内容。

当您想在 MacOS X 上使用 Java 进行编程时,您需要安装 JDK。 JDK安装在不同的路径下,一般与用户级JRE没有关联。也就是没有体现在控制面板中,是为了控制用户级的JRE。

用于 JDK 的工具将指向 JDK 的 JRE,而用于用户级 JRE 的工具将指向它。

我不能确切地说出他们为什么决定在用户​​ Java 和开发者 Java 之间完全分离。但我可以提供一个猜测:Macs 可以被多个用户使用。假设其中一个用户是开发人员并且正在对 Java 安装进行更改,例如在密钥库中撤销和添加安全密钥,更改安全策略文件等。我想 Oracle 不希望在开发中进行这些更改Java 影响 Mac 的所有其他用户,他们不知道开发环境的存在并且无法在其中进行更改。

您通过从 Oracle 网站下载完整版本来更新 JDK。请注意,每个新的 JDK 都安装 除了 旧的 JDK,但设置为新的默认值。如果您想删除旧的 JDK,您必须手动执行此操作,遵循 instructions on the Oracle site