无需第三方工具手动切换系统默认版本:
正如这个旧的答案中所详细描述的,在macOS上/usr/bin/ Java是一个包装工具,它将使用JAVA_HOME指向的Java版本,或者如果没有设置该变量,将在/Library/Java/JavaVirtualMachines/下查找Java安装,并将使用最高版本的Java版本。它通过查看Contents/Info来确定版本。在每个包下面写上。
有了这些知识,你可以:
通过重命名Info来控制系统将使用哪个版本。在您不想作为默认值使用的版本中使用plist(实际的Java运行时本身不使用该文件)。
通过设置$JAVA_HOME来控制特定任务使用哪个版本
我刚刚用OpenJDK和Mojave验证了这一点。
在一个全新的系统上,没有安装Java版本:
$ java -version
No Java runtime present, requesting install.
取消这个,在https://jdk.java.net上下载OpenJDK 11 & 12ea;
安装OpenJDK11:
$ cd /Library/Java/JavaVirtualMachines/
$ sudo tar xzf ~/Downloads/openjdk-11.0.1_osx-x64_bin.tar.gz
系统java现在是11:
$ java -version
openjdk version "11.0.1" 2018-10-16
[...]
安装OpenJDK12(目前是早期访问):
$ sudo tar xzf ~/Downloads/openjdk-12-ea+17_osx-x64_bin.tar.gz
系统java现在是12:
$ java -version
openjdk version "12-ea" 2019-03-19
[...]
现在让我们从系统java包装器中“隐藏”OpenJDK 12:
$ cd jdk-12.jdk/Contents/
$ sudo mv Info.plist Info.plist.disabled
系统java回到11:
$ java -version
openjdk version "11.0.1" 2018-10-16
[...]
您仍然可以通过手动设置JAVA_HOME准时使用版本12:
$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
$ java -version
openjdk version "12-ea" 2019-03-19
[...]