394

我已经安装了从 oracle 网站下载的 JDK 7u7。但是安装后终端还是显示java version 6

$java -version
java version "1.6.0_35"
Java(TM) SE Runtime Environment (build 1.6.0_35-b10-428-11M3811)
Java HotSpot(TM) 64-Bit Server VM (build 20.10-b01-428, mixed mode)

知道为什么 java 7 没有出现吗?

答:好的,问题已经解决了。这是答案:我发现我的终端有一个 .bash_profile 并且 java home 变量设置为 1.6

export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home"

所以每次我打开一个新的终端窗口时,这就是导致问题的行。只需删除此行即可解决问题。您仍然需要遵循@aleroot 所说的内容,但如果这对您不起作用,请检查 .bash_profile(或 .bashrc)设置文件以查看您之前是否导出过任何 java 版本。

4

27 回答 27

298

Oracle 的安装程序将 java 放入/Library/Internet Plug-Ins/JavaAppletPlugin.plugin. 它不会覆盖/usr/bin/java. 所以,如果你发出一个

whereis java

在终端中,它将返回 /usr/bin/java。(这又指向/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/javaApple 的 1.6 版本)。

因此,如果您想使用新的 java 版本,请替换/usr/bin/java符号链接,使其指向/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java

sudo rm /usr/bin/java
sudo ln -s /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java /usr/bin
于 2013-02-14T12:50:15.667 回答
115

安装JDK 7,这个问题就会自行解决。

确保获得包含编译器和类似内容的 Java 开发工具包 (JDK),而不仅仅是 Java 运行时环境 (JRE)。

于 2013-08-10T23:52:46.590 回答
105

vi ~/.bash_profile

添加

export JAVA_HOME=`/usr/libexec/java_home -v 1.7`

这告诉您的/usr/bin/java链接目标使用安装在

/Library/Java/JavaVirtualMachines/

所以对于 JDK1.7.0_17 JAVA_HOME将是:

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

注意:最近该领域发生了很多变化,将 Mac OS X 从 Appels 自己的系统集成 Java 包迁移到基于 Oracle 的 Java 包。从 Mac OS X 10.8.2 开始,上述解决方案运行良好

于 2013-03-09T02:44:50.887 回答
64

因为您需要在 Java Preferences 窗格中输入并以这种方式仅标记 JVM 7:

Java 首选项

要在 Mac OS X 中轻松快速地打开Java 首选项窗格,您只需调用 Spotlight⌘</kbd>+SPACE and type System Preferences it will show up in the last row of the window.

于 2012-10-06T07:03:20.470 回答
56

就我而言,问题在于 Oracle 将其安装到了与我习惯不同的位置。

从 Oracle 下载:http: //java.com/en/download/mac_download.jsp ?locale=en

  1. 通过查看 System Prefs 来验证它是否已正确安装:

    • Command-Space 打开 Spotlight,输入“系统偏好设置”,按回车键。
    • 单击底部行中的 Java 图标。Java 控制面板打开后,单击“Java”选项卡、“查看...”,并验证您的安装是否正常。您还可以在那里看到一个“路径”,如果它们与我的不同,您可以将其放入下面的命令中。
  2. 验证版本是否符合您的预期(根据需要在您的路径中添加):

    /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java -version

  3. 创建从 /usr/bin/java 到新安装的链接

    sudo ln -fs /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java /usr/bin/java

  4. 健全检查您的版本:

    java版本

于 2013-07-22T19:58:34.103 回答
36

我遇到了类似的问题,终端没有更新 java 版本以匹配安装在 mac 上的版本。

设置 JAVA_HOME 环境变量没有问题

我想出了一个临时的、有点痛苦但有效的解决方案。

在您的 .bash_profile 中添加以下行:

export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home"

(这是我机器上的路径,但在您的机器上可能不同,请确保获取您的。路径应与 /Library/Java/JavaVirtualMachines/ 匹配)

运行source ~/.bash_profile

正如我所提到的,这是一个临时的创可贴解决方案,因为 java 主路径是硬编码的。确实没有办法设置获取最新版本的路径,因为这就是苹果应该为终端所做的事情,问题是苹果的 java_home 环境变量没有得到更新。

于 2013-02-12T20:04:09.157 回答
26

/usr/bin/java自 El Capitan 以来,由于引入了新的“无根”政策,因此很难删除符号链接。

因此,我只是将最新 java 版本的路径(在我的情况下是/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin)添加到PATH我的.bashrc文件中:

# Use latest java version
export PATH=/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin:$PATH

.bashrc要为当前会话重新加载文件,请source ~/.bashrc在 shell 中运行。.bashrc您只需对更改文件之前已启动的会话执行此操作。

现在使用最新版本,当您java在 shell 中使用时。

于 2016-03-17T13:21:57.520 回答
21

更新

brew tap adoptopenjdk/openjdk
brew cask install adoptopenjdk/openjdk/adoptopenjdk8

https://stackoverflow.com/a/28635465

旧版本 对我来说,最简单和最干净的方法是使用 homebrew 安装 Java,如下所述:

https://stackoverflow.com/a/28635465

brew update
brew cask install java
于 2016-12-15T11:20:46.860 回答
14

您可以在终端中执行以下命令:

export PATH="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin:$PATH"

这用新的java替换了旧的java。

于 2017-05-22T08:10:20.560 回答
13

基本问题:/usr/bin/java最初是指向OSX本身提供的(/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java)我们需要将其指向JDK安装程序下载的那个。以下步骤适用于 OSX 10.10.4 Yosemite。

  • 打开系统偏好设置 -> 选择 Java。Java 窗口打开。
  • 单击顶部的 Java 选项卡。点击“查看”按钮。
  • Java 运行时环境设置选项卡打开如下: JRE 设置选项卡
  • 双击该Path项目并复制路径 (cmd+c)。这是 JDK 安装程序/更新程序安装的最新版本。就我而言,路径是/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java
  • 打开终端。在这一步中,我们将(符号链接,ln -s命令)系统 java 二进制文件指向我们在上一步中发现的最新版本。运行以下命令:

sudo ln -s /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java /usr/bin/java

就是这样。要验证,您可以 java -version 在终端上运行。它应该输出您安装/更新到的最新版本。

于 2015-11-06T17:02:48.690 回答
10

我做了

export JAVA_HOME=`/usr/libexec/java_home`

这解决了我的 Java 8 问题。

前:

java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)

后:

java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)
于 2014-06-24T17:31:54.620 回答
7

http://www.java.com/en/download/faq/java_mac.xml是一个很好理解的地方,虽然 Apple 正在停止对 Java 的支持,但为什么 Java Preferences 不再存在并依赖 System_Preferences => Java = > 如果安装了 Oracle 的 Java 7,则为 Java。

于 2012-10-26T15:58:45.020 回答
7

我可以建议你看看工具Jenv

这将允许您随时在已安装的 JVM 之间切换。

简单来说:

jenv global oracle-1.7

然后用于测试目的:

jenv global oracle-1.6

而且您有更多可用的命令。

于 2013-02-13T15:41:10.853 回答
6

硬编码 JAVA_HOME 路径可能不是最好的主意。该/usr/libexec/java_home实用程序 sill 适用于我在 Mac OSX Lion 10.7.5 和 JDK 1.7.0_13 上。根据其手册页,它旨在与 Apple 的旧 Java Preferences 窗格一起使用,但它似乎与 Oracle 提供的替代品(Java Control Panel)一起使用。例如,运行/usr/libexec/java_home -V列出了我机器上所有已安装的 JDK(1.6.* 和 1.7.*)。

因此,正如在其他线程中所讨论的(例如,我应该在 OSX 上将 JAVA_HOME 设置为什么),我仍然建议将以下行添加到您的 .bash_profile 中:

export JAVA_HOME=$(/usr/libexec/java_home)
于 2013-02-13T08:13:13.660 回答
6

这是疯了!Oracle如何提供不安装任何东西的安装程序!?

无论如何对我来说是:

sudo rm /usr/bin/java
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/bin/java /usr/bin/java

其中 1.8.0_31 是您安装的 java 版本...

于 2015-02-12T02:31:32.023 回答
6

如果您的机器上有多个 Java 版本,并且您想在运行时动态选择它,即在我的情况下,我有两个版本:

ls -la /Library/Java/JavaVirtualMachines
drwxr-xr-x  3 root  wheel    96B Nov 16  2014 jdk1.7.0_71.jdk/
drwxr-xr-x  3 root  wheel    96B Mar  1  2015 jdk1.8.0_31.jdk/

您可以通过修改 /etc/profile 内容来更改它们。只需在文件末尾添加(或修改)以下两行:

export JAVA_HOME=YOUR_JAVA_PATH/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

就我而言,如果我想使用它应该如下所示:

爪哇 7:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

爪哇 8:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

保存文件后,请运行 source /etc/profile,它应该可以工作。以下是我相应地使用第一个和第二个选项时的结果:

爪哇 7:

java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)

爪哇 8:

java -version 
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)

如果您的 java 文件夹位于不同的位置,则该过程类似。

于 2018-03-27T23:08:28.370 回答
5

简单的解决方案

export PATH="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin:$PATH"
于 2017-05-03T00:14:06.867 回答
3

我认为您可以尝试安装 jdk 而不是 jre。通过安装 jdk,/usr/bin/java 中的 java 将被替换,所有库都可以正常工作。

于 2015-07-05T04:34:05.653 回答
3

如果您安装了 Homebrew,您可以安装java-switcher以更快地更改 Java 默认版本

brew tap andycillin/tap
brew install java-switcher

然后,您可以只使用一个命令来切换您的默认 Java 版本。

java-switcher 1.7

或者

java-switcher 10
于 2019-05-09T14:34:49.353 回答
1

发生这种情况是因为您的 .bash_profile 没有反映更改。要反映它,只需使用以下命令

$ source .bash_profile
于 2014-03-14T08:54:39.133 回答
1

您可以运行此命令来查找 /Library/Internet Plugins/ 下的 Java 版本:

defaults read /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Info.plist CFBundleVersion
于 2016-03-29T14:59:57.677 回答
0

由于我没有遇到过这个问题,所以我有一个预感——

你能试试这个:

软链接“java_home”指向哪里:

ls -lrt /usr/libexec/java_home

输出:(受阻)lrwxr-xr-x java_home -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home

**ls -lrt /System/Library/Frameworks/JavaVM.framework/Versions 我的 MAC 生成以下内容:

 lrwxr-xr-x CurrentJDK ->
 /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents**

 lrwxr-xr-x   Current -> A
 lrwxr-xr-x  1 root  wheel   10 Oct 18 14:39 1.6.0 -> CurrentJDK
 lrwxr-xr-x  1 root  wheel   10 Oct 18 14:39 1.6 -> CurrentJDK
 lrwxr-xr-x  1 root  wheel   10 Oct 18 14:39 1.5.0 -> CurrentJDK
 lrwxr-xr-x  1 root  wheel   10 Oct 18 14:39 1.5 -> CurrentJDK
 lrwxr-xr-x  1 root  wheel   10 Oct 18 14:39 1.4.2 -> CurrentJDK
 lrwxr-xr-x  1 root  wheel   10 Oct 18 14:39 1.4 -> CurrentJDK

基于此,我们可能会得到进一步进行的提示?

于 2013-02-13T14:57:51.380 回答
0

我通过重新安装 Yosemite 解决了这个问题,然后在终端 (java -version) 和 (javac -version) 上交叉检查 java 版本。它现在工作正常。它不会更改为 java 7,因为版本 6 仍然存在于 (command + n ) libray>java>javavirtualmachine>your javac current version.you 需要寻址到 java home 。

于 2015-05-14T22:49:00.670 回答
0

我解决了这个问题 sudo rm /usr/bin/java

我下载并安装了最后一个 Java SE 运行时环境: http ://www.oracle.com/technetwork/java/javase/downloads/index.html

sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/jre/bin/java /usr/bin/java没有为我工作,因为我得到了Operation not permitted. El Capitan 现在以“无根”模式(又称系统完整性保护)保护某些系统目录。它适用于 macOS Sierra,并且在可预见的将来可能会适用于新的 macOS 版本。

于 2017-04-12T19:18:13.663 回答
0

通过 Oracle 站点上的分布式 JDK DMG 安装会为我自动更新所有内容。我已经看到(在 El Capitan 中)通过System Preferences > Javado 更新进行更新,但这并没有反映到命令行。通过 DMG 安装就可以了。

于 2018-07-27T17:08:44.560 回答
0

检查已安装的 JDK 版本:

$ ls  /Library/Java/JavaVirtualMachines/
jdk-11.0.2.jdk  jdk1.8.0_91.jdk

现在在您的~/.bashrc导出中JAVA_HOME指定版本:

if [ -e /usr/libexec/java_home ]; then
  export JAVA_HOME=$(/usr/libexec/java_home -v 11)
fi

获取 bashrc 文件,Java 版本将更新:

$ java -version
java version "11.0.2" 2019-01-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.2+9-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode)
于 2019-03-11T01:18:46.020 回答
0

最新100%有效方法:


在 bash 中:

vim ~/.bash_profile

添加

export PATH="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin:$PATH"
  • :wq保存
  • cmd+q 强制退出 bash
  • 再次打开 bash,然后输入java -version

但实际上这条路径指向的是 jre 而不是 jdk。

如果要指向JDK的路径,则需要

  1. 确保您已安装 JDK 而不是单个 JRE 运行时
  2. 替换之前的路径PATH="/Library/Java/JavaVirtualMachines/jdk1.8.0_221.jdk",你可以去/Library/Java/JavaVirtualMachines确保你已经安装了你期望的JDK版本。
于 2019-09-03T12:22:18.697 回答