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

Installed Java 7 on Mac OS X but Terminal is still using version 6


我安装了从oracle网站下载的JDK 7u7。 但安装后,终端仍然显示java版本6

1
2
3
4
$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

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


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



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

1
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

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



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


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



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开始,上述解决方案工作正常



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


Java Preferences


要在Mac OS X中轻松快速地打开Java Preferences窗格,您只需使用 + SPACE调用spotlight,然后键入它将显示在窗口最后一行的System Preferences。



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


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


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

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

  • 验证版本是否符合您的预期(根据需要在路径中为sub):


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


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


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


  • 理智检查您的版本:


    java -version



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


    设置JAVA_HOME环境变量没有问题


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


    在你.bash_profile中添加以下行:

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


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


    运行source ~/.bash_profile


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



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


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

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


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


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



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


    https://stackoverflow.com/a/28635465

    1
    2
    brew update
    brew cask install 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
    • 打开终端。在这一步中,我们将系统java二进制文件指向(符号链接,ln -s命令)到我们在上一步中发现的最新版本。运行以下命令:


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


    而已。要验证,您可以运行
    <5233>
    在终端上。它应该输出您安装/更新的最新版本。



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

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


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



    我做到了

    1
    export JAVA_HOME=`/usr/libexec/java_home`


    并修复了我的Java 8问题。


    之前:

    1
    2
    3
    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)


    后:

    1
    2
    3
    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)



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



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


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


    简单地说:

    1
    jenv global oracle-1.7


    然后用于测试目的:

    1
    jenv global oracle-1.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中添加以下行:

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



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


    无论如何对我来说是:

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


    简单解决方案

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



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

    1
    2
    3
    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内容来更改它们。只需在文件末尾添加(或修改)以下两行:

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


    在我的情况下,如果我想使用它应该像下面这样:


    Java 7:

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


    Java 8:

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


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


    Java 7:

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


    Java 8:

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


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



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



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

    1
    $ source .bash_profile



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

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


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

    1
    2
    brew tap andycillin/tap
    brew install java-switcher


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

    1
    java-switcher 1.7


    要么

    1
    java-switcher 10


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


    我下载并安装了最后一个Java SE Runtime Environment:
    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版本。



    由于我没有遇到这个问题,我正在采取预感 -


    你能试试这个:


    软链接"java_home"指向哪里:

    1
    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产生以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     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


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



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



    检查安装的JDK版本:

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


    现在在~/.bashrc export JAVA_HOME中指定版本:

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


    来源bashrc文件,Java版本将更新:

    1
    2
    3
    4
    $ 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)


    我通过重新安装Yosemite解决了这个问题,然后在终端(java -version)和(javac -version)上交叉检查java版本。它现在工作得很好。它不会改变为java 7,因为版本6仍然存在(命令+ n )libray> java> javavirtualmachine>你的javac当前版本。你需要解决java home。