如何在macOS上设置或更改默认Java(JDK)版本?

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

1261353 次浏览

这有点棘手,但请尝试按照在OS X 10.9上安装Java(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

首先运行/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/Home1.6.0_65-b14-462, x86_64:   "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home1.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的init文件中。

对于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 ~/.zshrcecho $JAVA_HOMEjava -version

来自Apple的官方java_home(1)手册页

**USAGE**
/usr/libexec/java_home  helps  users  set a $JAVA_HOME in their login rc files, or provides a way forcommand-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  fullpath 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`

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

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

使用jenv是一种简单的方法。(2022年更新)

  1. 安装jenv:请参阅开始吧

  2. 使用brew安装java

    brew install openjdk@11ln -s /usr/local/opt/openjdk@11/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk-11.jdk
    #other javabrew install openjdk@8brew install openjdk@17
  3. 添加java到jenv

    jenv add /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home
  4. 使用:引用jenv

基于 /usr/libexec/java_home的小鱼功能

function jhomeset JAVA_HOME (/usr/libexec/java_home $argv)echo "JAVA_HOME:" $JAVA_HOMEecho "java -version:"java -versionend

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

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

然后在javas do之间切换:

$> 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

安装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

除了上述答案之外,我在我的.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

我可以通过输入以下内容切换到Java8:

$ j8java 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)

根据@mark hellewell的回答,我创建了几个别名函数来为您执行此操作。只需将这些添加到您的shell启动文件中

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

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

function setjdk() {if [ $# -ne 0 ]; thenremoveFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'if [ -n "${JAVA_HOME+x}" ]; thenremoveFromPath $JAVA_HOMEfiexport JAVA_HOME=`/usr/libexec/java_home -v $@`export PATH=$JAVA_HOME/bin:$PATHfi}

把它放在你的~/.配置文件中,并在你的终端中使用它,比如setjdk 1.8setjdk 1.7setjdk 9等…

如果您没有removeFromPath,则为:

//方法名的变化//方法名的变化(){导出PATH=$(echo$PATH|ses-E-e"s;: 1$;"-e"s; 1$:? ;;")}

使用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

太容易的解决方案:多么令人头痛-这是一个对我有效的快速简单解决方案。

Mac OS Sierra版本10.12.13

  1. 使用快捷键:CMD+SHIFT+G-输入“/Library/”

  2. 找到JAVA文件夹

  3. 右键单击Java文件夹=移动到废纸箱(需要密码)

  4. 安装:JavaSE Development Kit 8jdk-8u131-macosx-x64.dmg|下载Javascript SDK

  5. 确保新的JAVA文件夹出现在 /LIBRARY/
  6. 安装Eclipse|为Java开发人员安装Eclipse IDE
  7. Boom Done

这个答案试图解决:当几个版本的JDK安装在macOS El Capitan或更高版本(Sierra、High Sierra、Mojave)上用于开发目的时,如何在系统范围内控制java版本(不仅仅是在当前运行的shell中)。据我所知,目前的答案都没有这样做(*)。

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

以下方法至少适用于Java7到12(在撰写本文时的早期访问),适用于oracleJDKOpenJDK(包括由AdoptOpenJDK构建,于2018年10月中旬之后制作)。

无需第三方工具的解决方案:

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

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

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


调查的细节在这个要点


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

tl; dr

添加行:

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

到文件

~/.bash_profile

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

然后source ~/.bash_profile

JDK切换脚本

我改编了上面@Alex的答案,并编写了以下代码来修复Java9。

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

切换到Java8

$ jdk 8Switching java version 8Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/usr/bin/javajava 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)

切换到Java9

$ jdk 9Switching java version 9Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/usr/bin/javajava 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)

如果您正在使用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 jhomeset -g -x JAVA_HOME (/usr/libexec/java_home $argv)echo "JAVA_HOME:" $JAVA_HOMEecho "java -version:"java -versionend
funcsave jhome

要了解您安装的版本 /minor版本,您可以执行以下操作:

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

如果仍然无法设置它。使用此命令。

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

那么你必须使用这个。

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

它肯定会奏效。

首先找出你在哪里存储环境变量-

  1. emacs
  2. bash_profile
  3. zshrc文件

设置环境变量的步骤:-

  1. 从JAVA下载jdk

  2. 双击安装

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

    对于emacs.profile,您可以使用此链接或查看下面的屏幕截图

在此处输入图片描述

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

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


安装配置

步骤:

  • [基础-部分]
  • 手动下载jdk. tgz文件)
  • 在适当的位置正确解压并重命名。
    e. g/mnt/star/program/java/jdk-1.8
  • 做一个软链接,稍后会改为切换java版本。
    e. gln -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
    e. gJAVA_HOME=/mnt/star/program/java/java
  • 然后打开一个新的bash shell。java -version应该打印java版本。
  • [更多版本-部分]
  • 根据需要下载并安装更多Java版本,类似于上述步骤。
    e. g
    /mnt/star/program/java/jdk-11
  • [开关-部分]
  • ~/.bashrc中,为各种Java版本定义变量。
    e. g
    _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
    切换到Java11
  • jv8
    切换到Java8
  • jvd
    切换到默认Java版本,由上面定义的_E_JAVA_HOME_D表示。
  • jv
    显示java版本。

输出示例:

eric@eric-pc:~$ jvjava 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:~$ jv11eric@eric-pc:~$ jvjava version "11.0.1" 2018-10-16 LTSJava(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:~$ jvderic@eric-pc:~$ jvjava 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

Tips

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

    //这是一个软链接到jdk1.8.0_191
    jdk-8

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

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

没有额外的工具来安装,在/usr/libexec/java_home -V给出的列表中包含单独安装的JDK的简单方法是将目录符号链接如下:

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

第一个参数应该是一个包含子目录Contents/Home/bin等的目录。

例如,对于注册Android Studio附带的JDK/JRE,使用:

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

现在,java_home将在Matching Java Virtual Machines下列出JDK,您可以如上所述选择它。

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

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

为使用默认进程的人使用终端的四个简单步骤…:)

  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…

macOS埃尔卡皮坦或更高版本将选择/Library/Java/JavaVirtualMachines中可用的更高版本的JDK,因此为了降级,您可以将文件Info.plist重命名为类似Info.plist.disabled的其他版本,以便操作系统选择以前的版本。

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

//Open bash profileopen ~/.bash_profile
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
// run bash profilesource ~/.bash_profile

以前我在. 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

  1. 将以下代码行添加到您的. zshrc(或bash_profile):

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

  1. 保存到会话:

#源代码

  1. 运行命令(例如j13、j14、j1.8…)

$j 1.8

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

/Users/user/IDE/project $ j 1.8/Users/user/IDE/project $ java -versionopenjdk 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 -versionopenjdk version "13.0.2" 2020-01-14OpenJDK 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.7Unable to find any JVMs matching version "1.7".

考虑以下方法只有来更改终端的每个特定选项卡的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/Homeexport PATH=$JAVA_HOME/bin:$PATH

如果您打开Iterm-使用第一个选项卡a-并执行以下命令:

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

输出是正确的和预期的

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

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

然后

javac -versionjavac 1.8.0_275
java -versionopenjdk 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)

它工作正常。当然,如果选项卡b关闭或打开新的选项卡c,所有工作都根据.bash_profile设置(因此是默认设置)

我正在使用这个函数我写

function javavset min_version 8set max_version 99set java_home_cmd '/usr/libexec/java_home 2>/dev/null --failfast --version'
if ! test (eval $java_home_cmd $argv)echo "Version not found"return 1end
for current_version in (seq $min_version $max_version)set path_to_remove (eval $java_home_cmd $current_version)if ! test -z $path_to_removeecho 'Removing' $path_to_remove 'from PATH'set PATH (string match --invert $path_to_remove/bin $PATH)endend
echo 'Setting up env for Java' $argvset -x JAVA_HOME (eval $java_home_cmd $argv)set PATH $JAVA_HOME/bin $PATHend

它基本上自动执行这个答案中的步骤,类似于这一个,但也负责设置PATH。

只需将其放在.config/fish/functions/中,然后像这样使用它:

javav 11 # Sets to Java 11javav 16 # Sets to Java 16

更新…

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

我将分享我使用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 14java14

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

$ source ~/.bash_profile

$ source ~/.zshrc

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

$ java8$ java -versionjava version "1.8.0_261"

有关更多信息,您可以看到这篇文章:如何使用Brew在Mac上安装Java

将此函数添加到bashrc或zshrc,java-change [version]以选择JDK

# set and change java versionsfunction java-change() {echo "----- old java version -----"java -versionif [ $# -ne 0 ]; thenexport JAVA_HOME=`/usr/libexec/java_home -v $@`export PATH=$JAVA_HOME/bin:$PATHfiecho "----- new java version -----"java -version}

在您的~/.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 8java8

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

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

查看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='导出JAVA_HOME=$JAVA_8_HOME'别名java11='导出JAVA_HOME=$JAVA_11_HOME'

来源:bash_profile

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

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

非常简单的回答:

  1. 运行并获取所有已安装的JDK路径
/usr/libexec/java_home -V
  1. jenv.be运行直接命令
git clone https://github.com/jenv/jenv.git ~/.jenv #Linux/macOSORbrew install jenv #macOS
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc$ echo 'eval "$(jenv init -)"' >> ~/.zshrc
jenv add PATH_FROM_STEP_1