在Mac OS X上安装了Java 7,但Terminal仍在使用版本6


391

我已经安装了从oracle网站下载的JDK 7u7。但是安装后,终端仍然显示Java版本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版本。


23
我遇到了这个问题,但是我只更新了JRE,而不更新了JDK。更新JDK后,它会显示正确的版本。
Paul Maserrat

迁移至此询问不同吗?
Nakilon

14
只是要引起对@Mazzy注释的更多关注,这是一个容易犯的错误。下载JRE v7将导致版本7在运行在线版本检查器或Java控制面板时出现,但是从命令行调用Java时,您将从以前安装的JDK运行较旧的版本。因此,请仔细检查以确保您安装了JDK,而不仅仅是JRE。
凸轮杰克逊

1
解决此问题的最佳方法是使用此export JAVA_HOME方法,此处以稍微更灵活的方式进行了详细说明
布莱德·帕克斯

5
让我用大写字母强调一下:此页面上的许多人都需要下载和安装最新的JDK。JAVA控制面板仅更新JRE。
Walter Tross

Answers:


64

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

Java首选项

要轻松快速地在Mac OS X中打开“ Java首选项”窗格,您只需使用+调用Spotlight,SPACE然后键入“ 系统偏好设置”,它将显示在窗口的最后一行。


3
是的,找到了。但仍然是终端中的1.6版,我需要重新启动吗?

1
该面板在10.8中不再存在。备择方案?
Pepijn

68
@Pepijn Panale是Mac OSX 10.8.2的历史,实际上不再需要它了。相反,您必须使用export JAVA_HOME=`/usr/libexec/java_home -v 1.7`从Oracle切换到最新的Java 7 JDK。
UweGünther

23
我认为他们在某些时候摆脱了Java Preferences。在我的盒子上找不到Spotlight。正在运行10.8.5。
quickshiftin

1
您可以在->系统偏好设置-> java下找到JAVA_HOME的确切位置。点击“ Java”标签。点击查看。Path变量显示您的JAVA_HOME(图块/ Home)。
agaase 2014年

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/java,这是Apple的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

22
这是命令:sudo ln -s / Library / Internet \ Plug-Ins / JavaAppletPlugin.plugin / Contents / Home / bin / java / usr / bin
Binarian

11
维克多的命令有效。但您可能还需要确保删除现有的Java符号链接rm /usr/bin/java
Matt Florence

7
在Oracle人员改进此过程之前,这里是在osx系统上安装Java的整个过程的指南,直到并包括以下最后的符号链接步骤:gist.github.com/johan/10590467
ecmanaut 2014年

61
我得到了rm: /usr/bin/java: Operation not permitted
Aditya 2015年

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

114

安装JDK 7,此问题将自行解决。

确保获得Java开发工具包(JDK),其中包括编译器和类似的东西,而不仅仅是Java Runtime Environment(JRE)。


7
安装完整的JDK,而不仅仅是JRE。
BrainO2 2014年

5
-1没有帮助。JDK的安装并没有改变/usr/bin/java,也没有JAVA_HOME。但是设置JAVA_HOME帮助。
安德里·尼姆琴科

3
在OSX 10.9.4上确认确定。它不会更改/ usr / bin链接,而是会更改其下的内容。所以 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java # But: /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java -version java version "1.7.0_67"
Joe Atzberger 2014年

1
也适用于JDK 1.8-(安装JDK 1.8而不是JRE 1.8)
Mark Chackerian

我尝试安装Java 1.8,但在El Capitan上不起作用。安装1.7解决了我的问题。
SPRBRN

104

vi ~/.bash_profile

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

这告诉您的/usr/bin/java链接目标使用安装在其中的最新Java 7 Package

/Library/Java/JavaVirtualMachines/

因此,对于JDK而言1.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起,上述解决方案可以正常工作


4
此答案+1是正确的imo,因为它在删除“ Java首选项”之前和之后均适用于Mac OS的版本,并且通过显示“ -v”选项,它演示了即使使用Java 7也可以使用Java 6已安装(这是我想要的)。因此,在运行Lion(10.7.5)的Mac上,我对“ -v 1.6”使用相同的命令。这很关键,因为我需要Java 6,而Oracle不为Mac OS提供一个Java 6,仅Java 7,即使安装了Java 7,这也允许我使用已安装的JAva 6。
大黄

1
此外,以使其更加灵活:mikemainguy.blogspot.com/2014/11/...
Mainguy

可以在这里找到更多信息,以获取答案!
布莱德·帕克斯

这在安装1.8 JKD之后在Sierra 10.12中为我工作,导出通过将1.7更改为1.8来完成。使用java_home实用程序很好的答案!
Scott Byers

56

就我而言,问题是Oracle将其安装在与以前不同的位置。

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

  1. 通过查看系统偏好设置来验证其是否正确安装:

    • 在Command-Space中打开Spotlight,键入“系统偏好设置”,然后按Enter。
    • 单击底部行中的Java图标。Java控制面板打开后,单击“ Java”选项卡,“查看...”,并验证您的安装是否有效。您也可以在此处看到一个“路径”,如果它们与我的不同,则可以将其分为以下命令。
  2. 验证版本是否符合您的期望(根据需要在路径中输入):

    /图书馆/互联网/增效工具/JavaAppletPlugin.plugin/Contents/Home/bin/java -version

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

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

  4. 健全检查您的版本:

    Java版本


对我也有用,我也尝试了其他解释,但是在Maverix中,没有面板可以选择版本号,而且更改.bash_profile也不起作用。完善!
Alex Cio 2014年

Eclipse在编译器下看不到1.7
Laser Hawk

为我工作!之前= 1.6.0_65,之后使用此解决方案= 1.7.0_60 ....谢谢!:)
数学2014年

但是Eclipse提供了错误,如仍“在JVM共享库不包含jni_createjavavm符号” .... :(
数学

1
谢谢您的帮助!除此之外,没有其他工作。运行优胜美地
LordZardeck 2015年

33

我遇到了一个类似的问题,终端没有更新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 home路径正在被硬编码。实际上,没有任何方法可以设置获取最新版本的路径,因为这据说是苹果公司已经在终端上所做的事情,问题在于苹果公司的java_home环境变量没有得到更新。


4
目录为空。$ ls / Library / Java / JavaVirtualMachines /
Pepijn

1
您可能对java 7的安装位置有疑问。请转到oracle的网站。单击“ Java SE开发工具包7u11”链接,接受许可协议,然后下载“ jdk-7u11-macosx-x64.dmg”。使用dmg安装Java 7,这应该将其放在JavaVirtualMachines目录中。
Derek

这是2019年初在Mojave 10.14.1上的一种解决方案
bitsand

27

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

所以,我只是简单地添加路径到最新的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在外壳中运行。您只需要对更改.bashrc文件之前已启动的会话执行此操作。

现在,当您java在外壳中使用时,将使用最新版本。


1
这个特殊的解决方案对我的mac os x el capitan来说很有效。我没有绕过capitan上的安全设置,而是安装了Java版本1.8。导出JAVA_HOME = /我的特定路径等等等/不起作用(转到首选项并将路径定位到1.8之后)。请注意1.6仍然安装。我必须创建一个.bashrc文件并按此处所述设置路径。我运行了Java -version和shazzam!有效。
umbregachoong

我非常希望此方法能够像在El Capitan上一样工作,并且无法获得其他解决方案。我创建了一个'.bashrc'文件并添加了上述行,但是如果我输入'java -version'我仍然得到1.6。我可能忽略了什么?
noLongerRandom

@ user3810073也许您需要运行source .bashrc才能重新加载.bashrc的内容
TabeaKischka,2016年

为我工作。我将该行添加到.bash_profile(在用户的主目录中),然后添加源.bash_profile。然后java -version给了我最新的版本。谢谢!
偷渡了

也可以通过如下符号链接来实现/usr/local/binsudo ln -sf "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java" /usr/local/bin/java 该假设在您/usr/local/bin之前/usr/bin$PATH默认情况下应为。
lifeofguenter


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 在终端上运行 。它应该输出您安装/更新到的最新版本。


2
为我工作,除了我必须在ln命令中添加-f。否则,如果因ln而失败:/ usr / bin / java:文件存在
Dale

就我而言,我将使用usr/local/bin而不是usr/bin在终端命令中使用
iAkshay

我正在“不允许操作”。
Shardul '17

以这种方式获得路径是理想的。然后,我能够导出它并重新加载bashrc来解决版本问题。以我为例,我是在Mojave 10.14.1上从版本7迁移到版本8
bitsand

12

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

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

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


1
奇怪的是,它替换了,但是如果我关闭终端然后再次打开,它再次显示旧版本
Parth Patel

确实如此。好累 一个非常临时的解决方案
用户

1
将该文件添加到.bashrc文件中,然后source ~/.bashrc使其永久保存
Azimjon Ilkhomov 18/12/27

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)

1
/usr/libexec/java_home是一个很好的指示,谢谢!
拉菲2015年

1
阅读了大量可能的解决方案后,为我完成了工作!谢谢:)
ronnyrr

7

http://www.java.com/zh_CN/download/faq/java_mac.xml是一个不错的地方,尽管Apple停止了对Java的支持,但为什么Java Preferences不再存在并依赖System_Preferences => Java = > Java(如果已安装Oracle的Java 7)。


2
这是很好的信息,但是您实际上应该提供的不仅仅是链接。如果将来链接断开,您的答案确实不会很有用。
psubsee2003

7

我可以建议您看看Jenv工具

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

简单如下:

jenv global oracle-1.7

然后稍后出于测试目的:

jenv global oracle-1.6

您还有更多可用的命令。


如果您已经在OS X系统中使用Homebrew,则可以为该答案+1,因为您可以利用Homebrew。我说的比其他人干净得多。更多信息在这里: jenv.be
piku 2014年

6

硬编码JAVA_HOME路径可能不是最好的主意。该/usr/libexec/java_home实用工具在Mac OSX Lion 10.7.5和JDK 1.7.0_13上对我有用。根据其手册页,它打算与Apple的旧Java Preferences面板一起使用,但似乎正在与Oracle(Java控制面板)提供的替代面板一起使用。例如,运行/usr/libexec/java_home -V列出了我机器上所有已安装的JDK(1.6。*和1.7。*)。

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

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

我会在这里同意您的意见,因为这是最佳做法,但是由于某些原因,无法正确设置java_home环境变量,因此这是行不通的。我相信在Apple的最新更新中,您的建议是默认情况下终端和其他相关应用程序中JAVA_HOME的默认操作。
Derek

@Derek对“未正确设置java_home环境变量”的确切含义是什么?根据本文的介绍,/usr/libexec/java_home实用程序还旨在与Java 7版本一起使用,并且它将返回安装的最新JDK的路径。它确实可以在我的机器上正常工作。
zagyi

1
是的,它应该起作用,但不适用于佩皮金提到的问题的人。
德里克

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版本...


苹果为什么不提供适当的方法?
jwilleke '16

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

就我而言,如果要使用它,它应该类似于以下内容:

Java 7:

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

Java 8:

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

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

Java 7:

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

Java 8:

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

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


5

简单的解决方案

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

太棒了 这个解决方案让我很开心。非常感谢Mick
用户

3

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


3

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

brew tap andycillin/tap
brew install java-switcher

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

java-switcher 1.7

要么

java-switcher 10

谢谢安迪,这很容易。
GreenROBO

1

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

defaults read /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Info.plist CFBundleVersion


0

由于我还没有遇到这个问题,所以我有预感-

你能试试这个吗?

软链接“ java_home”指向何处:

ls -lrt /usr/libexec/java_home

输出:(Stunted)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

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


阅读Internet上有关MAC-OSX的Java 7问题的一些评论,它显示为已阻止。请参阅:grep.dk/tag/xprotect-meta-plist。在XProtect.meta.plist中,我列出了Java 7和Flash。直到扮演漏洞警察
为止

0

我通过重新安装Yosemite解决了这个问题,然后在终端(java -version)和(javac -version)上交叉检查了Java版本。它现在可以正常使用了。它不会更改为Java 7,因为(command + n )libray> java> javavirtualmachine>您的javac当前版本。您需要访问java home。


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版本。


0

从Oracle站点通过分布式JDK DMG安装会自动为我更新所有内容。我已经看到(在El Capitan中)通过System Preferences > Javado update进行更新,但这并不能反映到命令行。通过DMG安装即可完成工作。


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)

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版本。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.