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

我已经安装了从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没有出现吗?

< p > < >强答: 好的,问题已经解决了。以下是答案: 我发现我的终端有一个.bash_profile, java主变量被设置为1.6

export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home"
所以这就是每次我打开新终端窗口时导致问题的行。 只要去掉这条线就能解决问题。您仍然需要遵循@aleroot所说的,但如果这对您不起作用,请检查.bash_profile(或.bashrc)设置文件,以查看您之前是否导出过任何java版本
351235 次浏览

因为你需要在Java Preferences窗格中输入,并以这样的方式只标记JVM 7:

Java Preferences

要在Mac OS X中轻松快速地打开Java的偏好窗格,只需使用+空间调用spotlight,并键入系统设置,它将显示在窗口的最后一行。

http://www.java.com/en/download/faq/java_mac.xml是一个很好的地方来理解,当苹果停止支持Java时,为什么Java Preferences不再存在,而依赖System_Preferences => Java => Java,如果安装了来自Oracle的Java 7。

我遇到过类似的问题,终端没有更新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环境变量没有更新。

硬编码JAVA_HOME路径可能不是最好的主意。/usr/libexec/java_home实用程序仍然适用于我的Mac OSX Lion 10.7.5和JDK 1.7.0_13。根据它的手册页,它是用来与苹果旧的Java首选项窗格一起使用的,但它似乎与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”指向哪里:

ls -lrt /usr/libexec/java_home

输出:(发育不良) lrwxr-xr-x java_home -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home

. 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

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

我可以建议你看看Jenv工具吗

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

仅仅是:

jenv global oracle-1.7

之后为了测试目的:

jenv global oracle-1.6

你有更多的命令可用。

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

whereis java

在终端中,它将返回/usr/bin/java.(反过来指向/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java,这是苹果的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

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从苹果自己的系统集成Java包转移到基于Oracle的Java包。上述解决方案在Mac OS X 10.8.2运行良好

在我的案例中,问题是Oracle将它安装到与我习惯的位置不同的位置。

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

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

    • Command-Space打开Spotlight,输入“System Preferences”,按enter键。
    • 单击底部一行中的Java图标。打开Java控制面板后,单击“Java”选项卡,“查看…”,并验证您的安装是否正常工作。你还可以在那里看到一个“路径”,你可以将它插入下面的命令中,以防它们与我的不同。
    • 李< / ul > < / >
    • 验证版本是你所期望的(在你需要的路径下):

      /图书馆/互联网/ JavaAppletPlugin \插件。插件/内容/ Home / bin / java - version < / p >

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

      sudo ln -fs /Library/Internet\ Plug-Ins/JavaAppletPlugin。插件/内容/ Home / bin / java /usr/bin/java < / p >

    • 检查你的版本:

      java - version < / p >

安装< >强JDK 7 < / >强,这个问题将自行解决。

确保使用Java开发工具包(JDK),其中包括编译器和类似的东西,而不仅仅是Java运行时环境(JRE)。

发生这种情况是因为.bash_profile没有反映变化。要反映它,只需使用下面的命令

$ source .bash_profile

我所做的

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)

这太疯狂了!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版本…

我通过重新安装优胜美地解决了这个问题,然后在终端上交叉检查java版本(java -version)和(javac -version) . it现在工作完美。它不会更改到java 7,因为版本6仍然存在于(command + n) libray>java>javavirtualmachine>您的javac当前版本。你需要地址到Java家。

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

基本问题:/usr/bin/java指向OSX本身最初提供的值(/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java) 我们需要将它指向JDK安装程序下载的那个。以下步骤适用于OSX 10.10.4 Yosemite
  • 打开系统首选项->选择Java。打开Java窗口。
  • 单击顶部的Java选项卡。点击“查看”按钮。
  • Java运行时环境设置选项卡打开如下: 李JRE Settings tab < / >
  • 双击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

< p >这它。要验证,只需运行 java -version 在终端上。它应该输出您安装/更新到的最新版本

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

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

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

要为当前会话重新加载.bashrc文件,请在shell中运行source ~/.bashrc。你只需要对在修改.bashrc文件之前已经启动的会话这样做。

现在,当你在shell中使用java时,使用的是最新版本。

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

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

更新

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

https://stackoverflow.com/a/28635465 < a href = " https://stackoverflow.com/a/28635465 " > < / >

< >强旧版本 对我来说,最简单和最干净的方法是使用以下所述的自制程序安装Java

https://stackoverflow.com/a/28635465 < a href = " https://stackoverflow.com/a/28635465 " > < / >

brew update
brew cask install java
我解决了这个问题 sudo rm /usr/bin/java < / p > 我下载并安装了最新的Java SE运行时环境: http://www.oracle.com/technetwork/java/javase/downloads/index.html < / p >

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

简单的解决方案

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

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

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

这将用新java替换旧java。

如果你的机器上有几个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文件夹位于不同的位置,这个过程是类似的。

从Oracle站点通过分布式JDK DMG安装会自动更新所有内容。我已经看到(在El Capitan)更新通过System Preferences > Java做更新,但不反映到命令行。通过DMG进行安装就可以了。

检查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)

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

brew tap andycillin/tap
brew install java-switcher

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

java-switcher 1.7

java-switcher 10

最新100%有效的方法:

< p > < br > 在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版本。