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


当前回答

更新……

在macOS Monterey中,v12.0.1 Cask不再是一个Brew命令。只要按照步骤进行,但在步骤4中只需执行$ brew install…或者$ brew install——桶…而不是$ brew桶安装…感谢@Shivam Sahil的评论。

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

1 -安装自制软件。

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

2 -安装自制酒桶。

$ 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

or

$ source ~/.zshrc

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

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

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

其他回答

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

一旦安装了sdkman,您就可以执行类似于nvm工具处理节点版本的命令。

Java将列出您的系统上可用的Java版本以及可在线安装的Java版本,包括您可以在SDK使用,SDK默认和SDK安装命令中使用的标识符。

例如,安装Amazon Corretto 11.0.8并询问它是否应该是新的默认值,这样做: SDK安装Java 11.0.8-amzn

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

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

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

JDK Switch脚本

我改编了上面@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)

博士tl;

加一行:

出口JAVA_HOME = ' /图书馆/ Java / JavaVirtualMachines / jdk1.8.0_144.jdk /内容/家庭的

到文件

~ / . bash_profile

(取代jdk1.8.0_144。JDK的下载版本)

然后源~/.bash_profile

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

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

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

如果打开第一个选项卡为A的“Iterm -”,执行以下命令:

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

Then

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)

它工作得很好。当然,如果选项卡B被关闭,或者你打开一个新的选项卡C,所有工作都根据.bash_profile设置(因此是默认设置)

macOS El Capitan或更新版本将选择/Library/Java/JavaVirtualMachines中可用的更高版本的JDK,因此为了降级,您可以将文件重命名为Info。plist改为Info.plist.disabled这样操作系统就会选择以前的版本。