【问题标题】:How to set or change the default Java (JDK) version on macOS?如何在 macOS 上设置或更改默认 Java (JDK) 版本?
【发布时间】:2014-03-24 18:07:04
【问题描述】:

如何在 Mac 上更改 Java 的默认版本?

【问题讨论】:

  • 执行/usr/libexec/java_home会告诉你什么?
  • /usr/libexec/java_home 返回 /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
  • 可能你只需要重新启动。你试过吗?
  • 是的,重新启动了计算机和终端……没有变化。
  • 您能接受下面@markhellewell 的高票回答吗?它会帮助我更快地找到它,而且很好。 :)

标签: java macos


【解决方案1】:

首先运行/usr/libexec/java_home -V,它将输出如下内容:

Matching Java Virtual Machines (3):
1.8.0_05, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
1.6.0_65-b14-462, x86_64:   "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-462, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

选择您想要的默认版本(1.6.0_65-b14-462 用于参数)然后:

export JAVA_HOME=`/usr/libexec/java_home -v 1.6.0_65-b14-462`

或者您可以只指定主要版本,例如:

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

现在,当您运行 java -version 时,您将看到:

java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)

export JAVA_HOME… 行添加到 shell 的初始化文件中。

对于 Bash(如 antonyh 所述):

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

对于鱼(如 ormurin 所述)

set -x JAVA_HOME (/usr/libexec/java_home -d64 -v1.8)

更新 .zshrc 文件应该可以:

nano ~/.zshrc

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0)

按 CTRL+X 退出编辑器 按 Y 保存更改

source ~/.zshrc
echo $JAVA_HOME
java -version

【讨论】:

  • 那些真的是export行的反引号
  • 这对我不起作用。从运行 java_home -V 中获取路径并将其添加到导出命令中,例如 export JAVA_HOME="/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home"
  • 这适用于 Bash - export JAVA_HOME=$(/usr/libexec/java_home -v 1.8) - 另请注意,java_home 允许部分匹配,因此您不必包含完整版本,因为它会找到最新安装的版本。这使更新更容易。
  • 确保您使用 ` ` not ' ' 进行导出。
  • 我希望每次我必须在谷歌上搜索“os x switch java version”并回到这里时都可以投票
【解决方案2】:

这个答案试图解决:当 JDK 的多个版本 被安装用于开发时,如何 control java version system-wide(不仅仅是在当前运行的 shell 中) ma​​cOS El Capitan 或更新版本(Sierra、High Sierra、Mojave) 上的用途。据我所知,目前的答案都没有做到这一点(*)。

作为一名开发人员,我使用多个 JDK,我想轻松地从一个切换到另一个。通常我有最新的稳定版用于一般用途,其他的用于测试。但我不希望系统(例如,当我启动我的 IDE 时)使用我目前拥有的最新“抢先体验”版本。我想控制系统的默认值,应该是最新稳定的。

以下方法至少适用于 Java 7 到 12(在撰写本文时是早期访问),适用于 Oracle JDKOpenJDK(包括builds by AdoptOpenJDK produced after mid-October 2018)。

没有第三方工具的解决方案:

  • 将所有 JDK 保留在默认位置,/Library/Java/JavaVirtualMachines 下。系统默认选择最高版本。
  • 要排除默认选择的 JDK,请将其 Contents/Info.plist 重命名为 Info.plist.disabled。当$JAVA_HOME 指向它,或者在脚本或配置中显式引用时,该 JDK 仍然可以使用。它会被系统的java 命令简单地忽略。

系统启动器将使用具有Info.plist文件的JDK中版本最高的JDK。

在使用备用 JDK 的 shell 中工作时,从现有答案(jenv/usr/libexec/java_home 周围的自定义别名/脚本等)中选择您的方法。


调查详情in this gist


(*) 当前答案要么已过时(不再对 macOS El Capitan 或 Sierra 有效),要么仅针对单个 JDK,或者未针对系统范围方面。许多人解释了如何更改$JAVA_HOME,但这只会影响当前的 shell 以及从那里启动的内容。它不会影响从操作系统启动器启动的应用程序(除非您更改正确的文件并注销/登录,这很乏味)。 jenv 也一样,它很酷,但据我所知,它只是改变了环境变量,所以它有同样的限制。

【讨论】:

  • 这是我一直在寻找的答案,因为 jenvJAVA_HOME 都能够设置系统范围的 java 版本,即 Eclipse 将使用的版本。
  • @Rodrigo 是的,正如“调查细节”(上面链接)中提到的:“安装 JDK 也会覆盖 /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/。显然这是新的首选项窗格将启动的那个 - 这个是我在我的解决方案中发现的唯一例外:那个东西仍将使用 JDK9(我安装的最新版本),但没有其他 Java 应用程序使用。”
  • 值得注意的是,在 /Library/Java/JavaVirtualMachines 中可以找到 java 版本,并且上述出色的工作解决方案就在该上下文中。
  • 没错,这是解决这个问题的最好和最实用的解决方案。不幸的是。
  • 我非常感谢您的回答。这修复了从操作系统启动器启动应用程序的问题。
【解决方案3】:

除了上述答案之外,我还在我的.bash_profile(或 MacOS 10.15+ 的.zshrc)中添加了以下几行,这使得切换非常方便(包括@elektromin 对 java 9 的评论):

alias j12="export JAVA_HOME=`/usr/libexec/java_home -v 12`; java -version"
alias j11="export JAVA_HOME=`/usr/libexec/java_home -v 11`; java -version"
alias j10="export JAVA_HOME=`/usr/libexec/java_home -v 10`; java -version"
alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
alias j8="export JAVA_HOME=`/usr/libexec/java_home -v 1.8`; java -version"
alias j7="export JAVA_HOME=`/usr/libexec/java_home -v 1.7`; java -version"

插入后执行$ source .bash_profile

我可以通过键入以下内容切换到 Java 8:

$ j8
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)

【讨论】:

  • 这是 Java 9 的语法:alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
  • 用于快速切换的简单别名。
  • 使用alias j10="export JAVA_HOME=`/usr/libexec/java_home`; java -version" 然后输入j10 可以让你切换回Java的当前版本(在我的例子中是Java 10)
  • 我会制作一个类似于 nvm 的 cli 工具来切换 Java 版本,但首字母缩略词 jvm 已经有其他含义了 :)
  • 采购时出现此错误:/Users/me/.zshrc:8: permission denied: /Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home
【解决方案4】:

一个基于/usr/libexec/java_home的小鱼函数

function jhome
    set JAVA_HOME (/usr/libexec/java_home $argv)
    echo "JAVA_HOME:" $JAVA_HOME
    echo "java -version:"
    java -version
end

如果你不使用fish,你可以在bash中做类似的事情:

#!/bin/bash

jhome () {
  export JAVA_HOME=`/usr/libexec/java_home $@`
  echo "JAVA_HOME:" $JAVA_HOME
  echo "java -version:"
  java -version
}

然后在javas之间切换:

$> jhome           #switches to latest java
$> jhome -v 1.7    #switches to java 1.7
$> jhome -v 1.6    #switches to java 1.6

参考:https://gist.github.com/kenglxn/1843d552dff4d4233271

【讨论】:

  • 这只针对特定的终端会话进行更改。有没有办法更新它以在系统范围内更改它?
  • 我必须写 export JAVA_HOME=(/usr/libexec/java_home $argv) 而不是 jhome 函数的第二行。
【解决方案5】:

使用jenv 是一种简单的方法。

  1. 安装 jenv,见Getting started

  2. 配置 jenv

    cd ~/.jenv/candidates/
    mkdir java
    cd java
    mkdir 1.7
    mkdir 1.8
    
  3. 符号链接 jdk 路径

    ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin ~/.jenv/candidates/java/1.7
    ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin ~/.jenv/candidates/java/1.8
    
  4. 一切准备就绪

切换命令:

jenv use java 1.8

设置默认值:

jenv default java 1.7

【讨论】:

  • 干净漂亮的解决方案。
  • 我不得不使用“jenv shell 1.8”而不是“jenv use java 1.8”。根据需要,“shell”也可以是“全局”或“本地”。
  • jenv 在工作时很好。不过建议不要这样做,因为它不会“真正”更改使用的默认 java 版本,通过运行命令“/usr/libexec/java_home -V”很明显,只有 JAVA_HOME。这会导致某些应用程序出现奇怪的问题,例如日食。
  • 除了我偏执的部分建议不要卷曲任何东西来抨击。即使您认为该网站是可信的,也没有人可以保证您它是不可破解的。使用您操作系统的包管理器。
  • 该信息已过时。检查official documentationmore detailed instructions
【解决方案6】:

这有点棘手,但请尝试按照Installing Java on OS X 10.9 (Mavericks) 中描述的步骤操作。基本上,您必须将您的别名更新为java

一步一步:

安装 JDK 1.7 后,您需要执行 sudo ln -snf 以将链接更改为当前的 java。为此,请打开终端并发出命令:

sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK

请注意,jdk1.7.0_51.jdk 目录可能会根据您安装的 SDK 版本而有所不同。

现在,您需要将JAVA_HOME 设置为指向jdk_1.7.0_xx.jdk 的安装位置。再次打开终端并输入:

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

您可以在您的.bashrc 文件中添加上面的export JAVA_HOME 行,以便在您的终端中永久拥有java

【讨论】:

  • 如何设置 JAVA_HOME 变量?有没有我设置的特定地方?
  • 我在哪里导出 JAVA_HOME?那将保存在哪里?
  • 我已经更新了答案。你知道你安装的SDK版本吗?文件夹名称采用 SDK 版本号,因此上面的命令可能会有所变化。
  • 我装的是最新的,我觉得是51。
  • 变量JAVA_HOME 将在当前终端会话中导出。如果需要,您可以将其添加到我们的.bashrc。我会将命令调整为最新版本。
【解决方案7】:

安装 JDK,而不仅仅是 JRE

/usr/libexec/java_home -v 1.8

给予

/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

下一个

touch .bash_profile

open -a TextEdit.app .bash_profile

TextEdit 会显示一个空白页,您可以填写。

添加到文档: export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

在终端:

export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"

试试命令:

javac -version

应该输出:

javac 1.8.0_111

【讨论】:

    【解决方案8】:

    tl;博士

    添加行:

    export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'

    到文件

    ~/.bash_profile

    (将 jdk1.8.0_144.jdk 替换为您下载的版本)

    然后source ~/.bash_profile

    【讨论】:

      【解决方案9】:

      使用 jenv,它就像一个 Java 环境管理器。超级好用又好清洁

      对于 Mac,请按照以下步骤操作:

      brew install jenv
      
      git clone https://github.com/gcuisinier/jenv.git ~/.jenv
      

      安装:如果您使用的是 bash,请按照以下步骤操作:

      $ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
      
      echo 'eval "$(jenv init -)"' >> ~/.bash_profile
      
      $ exec $SHELL -l
      

      将所需的 JVM 版本添加到 jenv:

      jenv add /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
      
      jenv add /System/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home
      

      检查已安装的版本:

      jenv versions
      

      设置您要使用的Java版本:

      jenv global oracle64-1.6.0
      

      【讨论】:

      • 我正在使用类似的工具:sdkman.io/usage - 恕我直言,比手动别名等方法更好
      【解决方案10】:

      更新...

      在 macOS Monterey 中,v12.0.1 Cask 不再是 Brew 命令。只需按照步骤操作,但在第 4 步中只需执行 $ brew install ...$ brew install --cask ... 而不是 $ brew cask install ... 感谢 @Shivam Sahil 评论。

      我将分享我使用 macOS Big Sur v11.4 的经验,处理这些问题的最佳方法是使用 Homebrew 安装 java:

      1 - 安装 Homebrew。

      $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
      

      2 - 安装 Homebrew Cask。

      $ brew tap homebrew/cask-versions 
      $ brew update 
      $ brew tap homebrew/cask
      

      3 - 安装最新版本的 Java

      $ brew cask install java
      

      4 - 安装其他需要的 Java 版本(Java8、Java11、Java13)。

      $ brew tap adoptopenjdk/openjdk
      
      $ brew cask install adoptopenjdk8
      $ brew cask install adoptopenjdk11
      $ brew cask install adoptopenjdk13
      $ brew cask install adoptopenjdk14
      

      5 - 在不同版本的 Java 之间切换

      不同Java版本之间的切换,只需要在你的.bash_profile.zshrc中添加以下内容即可。

      在这种情况下,我们希望能够在 Java8、Java11、Java13 和 Java14 之间切换:

      export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
      export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
      export JAVA_13_HOME=$(/usr/libexec/java_home -v13)
      export JAVA_14_HOME=$(/usr/libexec/java_home -v14)
      
      alias java8='export JAVA_HOME=$JAVA_8_HOME'
      alias java11='export JAVA_HOME=$JAVA_11_HOME'
      alias java13='export JAVA_HOME=$JAVA_13_HOME'
      alias java14='export JAVA_HOME=$JAVA_14_HOME'
      
      # default to Java 14
      java14
      

      6 - 重新加载 .bash_profile.zshrc 以使别名生效:

      $ source ~/.bash_profile
      

      $ source ~/.zshrc
      

      7 - 最后您可以使用别名在不同的 Java 版本之间切换。

      $ java8
      $ java -version
      java version "1.8.0_261"
      

      更多信息你可以看这篇帖子:How to Use Brew to Install Java on Mac

      【讨论】:

      • 介意做一个小编辑@hermeslm?看到这个:brew tap caskroom/cask Error: caskroom/cask was moved. Tap homebrew/cask instead.
      • 很好@hafichuk,这在这个答案的那一刻有效。我会编辑它,谢谢。
      • @hermeslm brew cask install 不适用于较新的版本,请添加以下更新:brew install cask packageName。参考L:stackoverflow.com/questions/30413621/…
      • 我必须运行 brew install adoptopenjdk/openjdk/adoptopenjdk8 而不是 brew cask install adoptopenjdk8
      【解决方案11】:

      对于使用默认流程的人来说,使用终端的四个简单步骤.. :)

      1. echo $JAVA_HOME 为您提供当前的 java 主页。例如:/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/

      2. cd /Library/Java/JavaVirtualMachines/ 会将您带到您通常安装 jdks 的文件夹(可能因您的机器而异)

      3. ls 显示您可用的文件夹(通常会有版本号,例如:jdk1.8.0_191.jdk openjdk-11.0.2.jdk
      4. export JAVA_HOME='/Library/Java/JavaVirtualMachines/openjdk-11.0.2.jdk/Contents/Home' 将更改 java home..

      【讨论】:

        【解决方案12】:

        ma​​cOS El Capitan 或更高版本将选择/Library/Java/JavaVirtualMachines 中可用的更高版本的JDK,因此为了降级,您可以将文件Info.plist 重命名为Info.plist.disabled 之类的其他名称操作系统将选择以前的版本。

        【讨论】:

        • 最简单的方法(:谢谢
        • 此解决方案允许在安装了 JDK 15 和 16 的情况下运行 VisualVM(目前不支持 JDK 16)。
        【解决方案13】:
        function setjdk() {
          if [ $# -ne 0 ]; then
            removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
            if [ -n "${JAVA_HOME+x}" ]; then
              removeFromPath $JAVA_HOME
            fi
            export JAVA_HOME=`/usr/libexec/java_home -v $@`
            export PATH=$JAVA_HOME/bin:$PATH
          fi
        }
        

        把它放在你的 ~/.profile 中,然后在你的终端中使用它,比如setjdk 1.8setjdk 1.7setjdk 9 等等……

        如果你没有removeFromPath,那么它是:

        function removeFromPath() { export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;") }

        【讨论】:

          【解决方案14】:

          您可以将其添加到您的 .bash_profile 以默认设置版本。

          //Open bash profile
          open ~/.bash_profile
          
          export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
          
          // run bash profile
          source ~/.bash_profile
          

          【讨论】:

          • 谢谢!需要注意的是,您必须包含` 标记。显然,将 1.8 替换为您可能需要的任何版本。在我的情况下 13.0.2
          【解决方案15】:

          考虑以下方法为终端的每个特定选项卡更改 JDK(即:iTerm)。

          /Library/Java/JavaVirtualMachines 路径中有以下两个jdks

          • openjdk8u275-b01
          • openjdk-11.0.9.1+1

          .bash_profile 文件中包含以下内容:

          export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-11.0.9.1+1/Contents/Home
          export PATH=$JAVA_HOME/bin:$PATH
          

          如果您打开 Iterm - 使用第一个 Tab A - 并执行以下命令:

          javac -version
          javac 11.0.9.1
          
          java -version
          openjdk version "11.0.9.1" 2020-11-04
          OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.9.1+1)
          OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.9.1+1, mixed mode)
          

          输出正确且符合预期

          但是,如果您打开第二个 Tab B 并且您需要覆盖 默认 JDK,则在终端中写入以下内容:

          export JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk8u275-b01/Contents/Home/
          export PATH=$JAVA_HOME/bin:$PATH
          

          然后

          javac -version
          javac 1.8.0_275
          
          java -version
          openjdk version "1.8.0_275"
          OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_275-b01)
          OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.275-b01, mixed mode)
          

          它工作正常。当然,如果 Tab B 已关闭或您打开新的 Tab C,所有工作都根据.bash_profile 设置(因此默认设置)

          【讨论】:

            【解决方案16】:

            将以下命令添加到~/.zshenv 文件中

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

            【讨论】:

              【解决方案17】:
              1. 将以下代码行添加到您的 .zshrc(或 bash_profile):

              别名 j='f(){ 导出 JAVA_HOME=/usr/libexec/java_home -v $1 };f'

              1. 保存到会话:

              $ source .zshrc

              1. 运行命令(例如 j 13、j14、j1.8...)

              $ j 1.8

              说明 这是参数化的,因此您不需要像发布的其他解决方案那样更新脚本。如果你没有安装 JVM,你会被告知。示例案例如下:

              /Users/user/IDE/project $ j 1.8
              /Users/user/IDE/project $ java -version
              openjdk version "1.8.0_265"
              OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_265-b01)
              OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.265-b01, mixed mode)
              /Users/user/IDE/project $ j 13
              /Users/user/IDE/project $ java -version
              openjdk version "13.0.2" 2020-01-14
              OpenJDK Runtime Environment (build 13.0.2+8)
              OpenJDK 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing)
              /Users/user/IDE/project $ j 1.7
              Unable to find any JVMs matching version "1.7".
              

              【讨论】:

                【解决方案18】:

                来自苹果官方java_home(1) man page

                **USAGE**
                
                   /usr/libexec/java_home  helps  users  set a $JAVA_HOME in their login rc files, or provides a way for
                   command-line Java tools to use the most appropriate JVM which can satisfy a minimum version or archi-
                   tecture  requirement.  The --exec argument can invoke tools in the selected $JAVA_HOME/bin directory,
                   which is useful for starting Java command-line tools from launchd plists without hardcoding the  full
                   path to the Java command-line tool.
                
                   Usage for bash-style shells:
                          $ export JAVA_HOME=`/usr/libexec/java_home`
                
                   Usage for csh-style shells:
                          % setenv JAVA_HOME `/usr/libexec/java_home`
                

                【讨论】:

                  【解决方案19】:

                  JDK 切换脚本

                  我已经改编了上面@Alex 的答案,并编写了以下内容来修复 Java 9 的代码。

                  $ cat ~/.jdk
                  #!/bin/bash
                  
                  #list available jdks
                  alias jdks="/usr/libexec/java_home -V"
                  # jdk version switching - e.g. `jdk 6` will switch to version 1.6
                  function jdk() {
                    echo "Switching java version $1";
                  
                    requestedVersion=$1
                    oldStyleVersion=8
                    # Set the version
                    if [ $requestedVersion -gt $oldStyleVersion ]; then
                      export JAVA_HOME=$(/usr/libexec/java_home -v $1);
                    else
                      export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`;
                    fi
                  
                    echo "Setting JAVA_HOME=$JAVA_HOME"
                  
                    which java
                    java -version;
                  }
                  

                  切换到 Java 8

                  $ jdk 8
                  Switching java version 8
                  Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
                  /usr/bin/java
                  java version "1.8.0_131"
                  Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
                  Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
                  

                  切换到 Java 9

                  $ jdk 9
                  Switching java version 9
                  Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
                  /usr/bin/java
                  java version "9.0.1"
                  Java(TM) SE Runtime Environment (build 9.0.1+11)
                  Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)
                  

                  【讨论】:

                    【解决方案20】:

                    如果你仍然无法设置它。使用这个命令。

                    导出 JAVA_HOME=/usr/libexec/java_home -v 1.8

                    那么你必须使用这个。

                    导出 JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

                    它肯定会起作用。

                    【讨论】:

                      【解决方案21】:

                      先搞清楚环境变量存放在哪里-

                      1. emacs
                      2. bash_profile
                      3. zshrc 文件

                      设置环境变量的步骤:-

                      1. 从JAVA下载jdk

                      2. 双击安装

                      3. 现在在你的文件中设置环境变量

                        一个。对于 emacs.profile,您可以使用 link 或查看下面的屏幕截图

                      b.对于 ZSH 配置文件设置 -

                      1. export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home
                      
                      2. source ~/.zshrc - Restart zshrc to reflect the changes.
                      
                      3. echo $JAVA_HOME - make sure path is set up properly 
                         ----> /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home
                      
                      4. java -version 
                      
                         -->  java version "1.8.0_112"  Java(TM) SE Runtime Environment (build 1.8.0_112-b16)Java HotSpot(TM) 64-Bit Server VM (build 25.112-b16, mixed mode)
                      

                      全部设置现在您可以轻松升级或降级 JAVA 版本..

                      【讨论】:

                        【解决方案22】:

                        如果你正在使用fish并且你正在使用mac并且你希望能够在JDK之间切换,那么下面在mac上适用于我。

                        @kenglxn 的回答对我不起作用,我发现 bcos 没有设置 -g 这是全局的!

                        放在~/.config/fish/config.fish下面

                        alias j8="jhome  -v 1.8.0_162"
                        alias j9="jhome  -v 9.0.1"
                        
                        function jhome
                            set -g -x JAVA_HOME (/usr/libexec/java_home $argv)
                            echo "JAVA_HOME:" $JAVA_HOME
                            echo "java -version:"
                            java -version
                        end
                        
                        funcsave jhome
                        

                        要知道你安装了哪个版本/次要版本,你可以这样做:

                        /usr/libexec/java_home -V                                                                              579ms  Wed 14 Feb 11:44:01 2018
                        Matching Java Virtual Machines (3):
                            9.0.1, x86_64:  "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
                            1.8.0_162, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
                            1.8.0_121, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
                        

                        【讨论】:

                          【解决方案23】:

                          在您的~/.bash_profile 中添加以下内容并相应地设置默认 java 版本。

                          export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
                          export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
                          
                          alias java8='export JAVA_HOME=$JAVA_8_HOME'
                          alias java11='export JAVA_HOME=$JAVA_11_HOME'
                          
                          # default to Java 8
                          java8
                          

                          我正在使用 macOS 并使用 brew 安装了 java。

                          编辑: 如果您没有使用bash,请更新正确的shell文件,例如,如果您使用的是zsh,那么它将是~/.zshrc

                          【讨论】:

                          • 如果我使用~/.zshrc(或zsh终端),这是否意味着我应该输入~/.zprofile
                          • 更新了答案@elliotching
                          【解决方案24】:

                          如果您有多个版本,并且想使用特定版本运行某些东西,请使用以下示例:

                          /usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar
                          

                          【讨论】:

                            【解决方案25】:

                            以前我在 .zshrc 中使用别名来轻松切换版本,但今天我使用 SDKMAN。 SDKMAN 还可以处理为系统设置默认 java,以及下载和安装新的 java 版本。

                            安装 sdkman 后,您可以执行类似于使用 nvm 工具处理节点版本的命令。

                            sdk list java 将列出您系统上可用的 Java 版本以及可在线安装的 Java 版本,包括您可以在 sdk usesdk defaultsdk install 命令中使用的标识符。

                            例如要安装 Amazon Corretto 11.0.8 并询问它是否应该是新的默认设置,请执行以下操作: sdk install java 11.0.8-amzn

                            我也经常使用的一个功能是.sdkmanrc 文件。 如果您将它放在您机器上的一个目录中并在该目录中运行sdk env 命令,那么您可以配置仅在该目录中使用的工具版本。也可以使用sdkman_auto_env=true配置自动使sdkman切换工具版本。

                            sdkman 还支持处理 JVM 的其他工具,例如 gradle、kotlin、maven 等。

                            欲了解更多信息,请查看https://sdkman.io/usage#env

                            【讨论】:

                              【解决方案26】:

                              根据@markhellewell 的回答,我创建了几个别名函数来为你做这件事。只需将这些添加到您的 shell 启动文件中

                              #list available jdks
                              alias jdks="/usr/libexec/java_home -V"
                              # jdk version switching - e.g. `jdk 6` will switch to version 1.6
                              function jdk() { 
                                echo "Switching java version"; 
                                export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`; 
                                java -version; 
                              }
                              

                              https://gist.github.com/Noyabronok/0a90e1f3c52d1aaa941013d3caa8d0e4

                              【讨论】:

                                【解决方案27】:

                                这是我在 Linux (Ubuntu / Mint 伙伴) 上的做法,我想 Mac 也可以这样做。


                                安装和配置

                                步骤:

                                • [基本 - 部分]
                                • 手动下载 jdk .tgz 文件)
                                • 在适当的位置正确解压缩和重命名。
                                  例如/mnt/star/program/java/jdk-1.8
                                • 做一个软链接,以后改成切换java版本。
                                  例如ln -s /mnt/star/program/java/jdk-1.8 /mnt/star/program/java/java
                                  因此/mnt/star/program/java/java 是软链接。
                                • 在启动脚本中设置JAVA_HOME
                                  可以使用/etc/profile.d/eric.sh 之类的文件,或者只使用~/.bashrc
                                  例如JAVA_HOME=/mnt/star/program/java/java
                                • 然后打开一个新的 bash shell。 java -version 应该打印 java 版本。
                                • [更多版本 - 部分]
                                • 根据需要下载并安装更多 Java 版本,与上述步骤类似。
                                  例如
                                  /mnt/star/program/java/jdk-11
                                • [切换 - 部分]
                                • ~/.bashrc中,为各种Java版本定义变量。
                                  例如
                                  _E_JAVA_HOME_11='/mnt/star/program/java/jdk-11'
                                  _E_JAVA_HOME_8='/mnt/star/program/java/jdk-8'
                                  # dir of default version,
                                  _E_JAVA_HOME_D=$_E_JAVA_HOME_8
                                • ~/.bashrc中,定义切换Java版本的命令。
                                  例如
                                  ## switch java version,
                                  alias jv11="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_11 $JAVA_HOME"
                                  alias jv8="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_8 $JAVA_HOME"
                                  # default java version,
                                  alias jvd="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_D $JAVA_HOME"
                                  alias jv="java -version"
                                • 在终端中,source ~/.bashrc 使更改生效。
                                • 然后可以使用定义的命令进行切换。

                                命令 - 来自上面的配置

                                命令:

                                • jv11
                                  切换到 Java 11
                                • jv8
                                  切换到 Java 8
                                • jvd
                                  切换到默认的 Java 版本,由上面定义的 _E_JAVA_HOME_D 表示。
                                • jv
                                  显示 java 版本。

                                示例输出:

                                eric@eric-pc:~$ jv
                                java version "1.8.0_191"
                                Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
                                Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
                                
                                eric@eric-pc:~$ jv11
                                eric@eric-pc:~$ jv
                                java version "11.0.1" 2018-10-16 LTS
                                Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
                                Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
                                
                                eric@eric-pc:~$ jvd
                                eric@eric-pc:~$ jv
                                java version "1.8.0_191"
                                Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
                                Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
                                
                                eric@eric-pc:~$ 
                                

                                机制

                                • 通过更改软链接进行切换,软链接为JAVA_HOME

                                提示

                                • 在我的机器上手动安装jdk时,我保留了次要版本,然后与主要版本进行软链接,但没有次要版本。
                                  例如
                                  // 这是实际的目录,
                                  jdk1.8.0_191

                                  // 这是指向jdk1.8.0_191的软链接
                                  jdk-8

                                  //这是指向jdk-8jdk-11的软链接
                                  java

                                • 我在~/.bashrc 中定义命令别名,但在单独的文件中定义变量。
                                  我使用~/.eric_var 来定义变量,~/.bashrc 将获取它(例如source $HOME/.eric_var)。

                                【讨论】:

                                  【解决方案28】:

                                  /usr/libexec/java_home -V 给出的列表中包含单独安装的JDK 的一种简单方法是对目录进行符号链接,如下所示:

                                  sudo ln -s path/to/jdk /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk
                                  

                                  例如,要注册 Android Studio 随附的 JDK(撰写本文时为 1.8.0_152),请使用:

                                  sudo ln -s /Applications/Android\ Studio.app/Contents/jre/jdk /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk
                                  

                                  现在java_home 将列出Matching Java Virtual Machines 下的JDK,您可以按上述方式选择它。

                                  【讨论】:

                                    【解决方案29】:

                                    将此功能添加到bashrc或zshrc,java-change [version]选择JDK

                                    # set and change java versions
                                    function java-change() {
                                      echo "----- old java version -----"
                                      java -version
                                      if [ $# -ne 0 ]; then
                                        export JAVA_HOME=`/usr/libexec/java_home -v $@`
                                        export PATH=$JAVA_HOME/bin:$PATH
                                      fi
                                      echo "----- new java version -----"
                                      java -version
                                    }
                                    

                                    【讨论】:

                                      【解决方案30】:

                                      检查Java版本:java -version

                                      版本切换:https://devqa.io/brew-install-java/

                                      打开 ~/.bash_profile

                                      导出 JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)

                                      导出 JAVA_11_HOME=$(/usr/libexec/java_home -v11)

                                      别名 java8='export JAVA_HOME=$JAVA_8_HOME' 别名 java11='export JAVA_HOME=$JAVA_11_HOME'

                                      来源 ~/.bash_profile

                                      当我们切换到 java11 或 java8 时,java -version 命令没有显示正确的版本。

                                      在这种情况下,使用 mvn -version 查看用于构建解决方案的正确 java 版本

                                      【讨论】:

                                        猜你喜欢
                                        • 2014-07-18
                                        • 1970-01-01
                                        • 2021-12-31
                                        • 1970-01-01
                                        • 1970-01-01
                                        • 2020-11-30
                                        相关资源
                                        最近更新 更多