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

Yan*_*ang 388 java macos java-7

我安装了从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)
Run Code Online (Sandbox Code Playgroud)

任何想法为什么java 7没有出现?

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

export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home"
Run Code Online (Sandbox Code Playgroud)

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

Áko*_*kos 298

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

whereis java
Run Code Online (Sandbox Code Playgroud)

在终端中,它将返回/ 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
Run Code Online (Sandbox Code Playgroud)

  • 我得到了`rm:/ usr/bin/java:不允许操作 (59认同)
  • 或者`export PATH ="/ Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin:$ PATH"` (35认同)
  • 这是命令:sudo ln -s/Library/Internet\Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java/usr/bin (22认同)
  • Viktor的命令有效.但您可能还需要确保删除现有的java符号链接`rm/usr/bin/java` (11认同)
  • 在Oracle人员改进这个过程之前,这里是在osx系统上安装java的整个过程,直到并包括最后的符号链接步骤:https://gist.github.com/johan/10590467 (7认同)
  • 记住你还需要更新jar,jarsigner,javac,javadoc,javah,javap,javaws,jcmd,jconsole,jdb,jhat,jinfo,jmap,jmc,jps,jrunscript,jsadebugd,jstack,jstat,jstatd的链接,和jvisualvm提供一个连贯的环境.这使得这个选项相当繁琐. (7认同)
  • 应该注意的是,从OS X El Capitan(10.11)开始,像`/ usr/bin/java`这样的文件只能由Apple签名的进程修改,除非你启动进入恢复模式.确保路径上的`/ usr/local/bin`和符号链接到该目录可能是个更好的主意. (7认同)
  • 由于无根策略,我建议在`/ usr/local/bin`下创建符号链接 (3认同)
  • @Mick你应该把你的评论作为答案,因为它比这个答案更正确,并且比其他答案更好地解决问题 (3认同)
  • 安装JDK为我修复了它.这种方式似乎是一种黑客行为,因为我们没有像@JoeAtzberger所提到的那样链接所有其他二进制文件. (2认同)

Bra*_*nO2 114

安装JDK 7,这个问题将自行解决.

一定要获得包含编译器和类似内容的Java Development Kit(JDK),而不仅仅是Java Runtime Environment(JRE).

  • 安装完整的JDK,而不仅仅是JRE. (7认同)
  • JDK for 1.7安装无法解决问题. (4认同)
  • -1它没有帮助.安装JDK不会改变`/ usr/bin/java`或`JAVA_HOME`.但是`JAVA_HOME`的设置有所帮助. (4认同)
  • 在OSX 10.9.4上确认确定.它不会更改/ usr/bin链接,它会更改它下面的内容.所以`/ usr/bin/java - > /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java#但是:/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java-版本java版"1.7.0_67"` (2认同)

Uwe*_*her 104

vi ~/.bash_profile

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

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

/Library/Java/JavaVirtualMachines/

所以对于JDK 1.7.0_17 JAVA_HOME来说:

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

注意:最近这个领域发生了很多变化,将Mac OS X从Appels自己的System集成Java包转移到基于Oracle的Java包.从Mac OS X 10.8.2开始,上述解决方案工作正常

  • 这个答案的+1是正确的,因为它适用于删除'Java Preferences'之前和之后的Mac OS版本,并且通过显示"-v"选项,它演示了即使java 7也可以使用java 6安装(这是我想要的).因此,在运行Lion(10.7.5)的Mac上,我使用与"-v 1.6"相同的命令.这是至关重要的,因为我需要Java 6而Oracle不提供Mac OS - 只有Java 7,这使得我可以使用已安装的JAva 6,即使安装了Java 7. (4认同)

ale*_*oot 64

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

Java首选项

要轻松快速地打开Mac OS X中的" Java偏好设置"窗格,您只需使用+调用聚光灯SPACE并键入系统偏好设置,它将显示在窗口的最后一行.

  • @Pepijn panale是Mac OSX 10.8.2的历史,并且不再需要它了.相反,你必须使用`export JAVA_HOME = \`/ usr/libexec/java_home -v 1.7 \``从Oracle切换到最新的Java 7 JDK. (68认同)
  • 我没有看到这样的窗格.在更新的qn中查看截图. (26认同)
  • 我认为他们在某些时候摆脱了Java偏好.Spotlight在我的盒子上找不到它.运行10.8.5. (23认同)
  • 是的,找到了.但仍然在终端版本1.6,我需要重启或什么的 (3认同)

小智 56

就我而言,问题在于Oracle正在将其安装到与以前不同的位置.

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

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

    • Command-Space打开Spotlight,输入'System Preferences',点击回车.
    • 单击底行中的Java图标.打开Java控制面板后,单击"Java"选项卡,"查看...",并验证您的安装是否有效.你也可以在那里看到一个"路径",如果它们与我的不同,你可以将它们放到下面的命令中.
  2. 验证版本是否符合您的预期(根据需要在路径中为sub):

    / 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 -version


小智 33

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

设置JAVA_HOME环境变量没有问题

我想出了一个暂时的,有点痛苦但有效的解决方案.

在你.bash_profile中添加以下行:

export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home"
Run Code Online (Sandbox Code Playgroud)

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

运行 source ~/.bash_profile

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

  • 该目录为空.$ ls/Library/Java/JavaVirtualMachines / (4认同)

Tab*_*hka 27

自El 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
Run Code Online (Sandbox Code Playgroud)

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

现在使用最新版本,当你java在shell中使用时.


Ber*_*rer 21

对我来说,最简单,最干净的方法是使用自制软件安装Java,如下所述:

/sf/answers/2004482581/

brew update
brew cask install java
Run Code Online (Sandbox Code Playgroud)

  • 这是更新java和javac的唯一解决方案.谢谢! (2认同)

Asw*_*mar 12

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

  • 适用于我,除了我必须添加-f到ln命令.否则,如果使用ln:/ usr/bin/java失败:文件存在 (2认同)

Amu*_*yap 12

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

export PATH="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

这将用旧的替换java旧版本.


Cli*_*der 10

我做到了

export JAVA_HOME=`/usr/libexec/java_home`
Run Code Online (Sandbox Code Playgroud)

并修复了我的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)
Run Code Online (Sandbox Code Playgroud)

后:

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)
Run Code Online (Sandbox Code Playgroud)


rev*_*her 7

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

  • 这是一个很好的信息,但你应该提供更多的细节,而不仅仅是一个链接.如果将来链接中断,您的答案确实不会非常有用. (2认同)

小智 7

我建议你看一下Jenv这个工具

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

简单地说:

jenv global oracle-1.7
Run Code Online (Sandbox Code Playgroud)

然后用于测试目的:

jenv global oracle-1.6
Run Code Online (Sandbox Code Playgroud)

而且你有更多的命令可用.


zag*_*gyi 6

对JAVA_HOME路径进行硬编码可能不是最好的选择.该/usr/libexec/java_home工具窗台上的Mac OSX 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)
Run Code Online (Sandbox Code Playgroud)


Kev*_*ker 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
Run Code Online (Sandbox Code Playgroud)

1.8.0_31是你安装的java版本...


Mic*_*ick 5

简单的解决方案

export PATH="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)


nxh*_*oaf 5

如果您的计算机上有多个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/
Run Code Online (Sandbox Code Playgroud)

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

export JAVA_HOME=YOUR_JAVA_PATH/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

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

Java 7:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

Java 8:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

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

Java 7:

java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Run Code Online (Sandbox Code Playgroud)

Java 8:

java -version 
java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Run Code Online (Sandbox Code Playgroud)

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