如何更改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

其他回答

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
}

把这个放在你的~/里。配置文件并在您的终端中使用它,如setjdk 1.8, setjdk 1.7, setjdk 9等…

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

函数removeFromPath() { export PATH=$(echo $PATH | sed -E -E ' s;:$1;;"- e”年代;1美元:?;;”) }

如果你有多个版本,并且你想使用一个特定的版本来运行一些东西,请使用这个例子:

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

考虑以下方法,仅为终端的每个特定选项卡(即: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设置(因此是默认设置)

以下是我如何在我的Linux (Ubuntu / Mint伙伴)上做到这一点,我猜Mac也可以这样做。


安装和配置

步骤:

[Basic - part] Download jdk (the .tgz file) by hand. Uncompress & rename properly, at a proper location. e.g /mnt/star/program/java/jdk-1.8 Make a soft link, which will be changed to switch java version later. e.g ln -s /mnt/star/program/java/jdk-1.8 /mnt/star/program/java/java Thus /mnt/star/program/java/java is the soft link. Set JAVA_HOME in a start script. Could use file like /etc/profile.d/eric.sh, or just use ~/.bashrc. e.g JAVA_HOME=/mnt/star/program/java/java Then open a new bash shell. java -version should print the java version. [More version - part] Download & install more Java version, as need, similar as above steps. e.g /mnt/star/program/java/jdk-11 [Switch - part] In ~/.bashrc, define variable for various Java version. 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 In ~/.bashrc, define command to switch Java version. e.g ## 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" In terminal, source ~/.bashrc to make the changes take effect. Then could switch using the defined commands.


命令-从上面的config

命令:

jv11 切换到Java 11 jv8 切换到Java 8 jvd 切换到默认的Java版本,该版本由上面定义的_E_JAVA_HOME_D表示。 合资企业 显示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。


Tips

在我的机器上手动安装jdk时,我保留次要版本,然后与主要版本做一个软链接,但没有次要版本。 如 //这是实际的目录, jdk1.8.0_191 //这是jdk1.8.0_191的软链接 jdk-8 //这是一个到jdk-8或jdk-11的软链接 java 我在~/中定义了命令别名。Bashrc,但是在单独的文件中定义变量。 我正在使用~/。Eric_var定义变量,~/。bashrc将源它(例如源$HOME/.eric_var)。

这有点棘手,但请尝试遵循在OS X 10.9 (Mavericks)上安装Java中描述的步骤。基本上,你得把你的别名更新为java。

循序渐进:

在安装JDK 1.7之后,您将需要执行sudo ln -snf命令来更改到当前java的链接。要做到这一点,打开Terminal并发出命令:

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

注意,目录jdk1.7.0_51. conf。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永久地存在于您的终端中