倘若装有多个版本,特别是从 8 跨到 9 这个分界线,如果是基于 IDE,那么一般使用 IDE 提供的 JDK 设置来指定就可以了。但如果是直接命令执行,那就需要来个方便切换版本的方法。
对于 MacOS,只需要设定 JAVA_HOME
这个环境变量就可以了,甚至不必要把这个路径添加到 PATH
中。
同时,在 MacOS 中,JAVA 相关有个好用的内置工具:/usr/libexec/java_home
$ /usr/libexec/java_home -h
Usage: java_home [options...]
Returns the path to a Java home directory from the current user's settings.
Options:
[-v/--version <version>] Filter Java versions in the "JVMVersion" form 1.X(+ or *).
[-a/--arch <architecture>] Filter JVMs matching architecture (i386, x86_64, etc).
[-d/--datamodel <datamodel>] Filter JVMs capable of -d32 or -d64
[-t/--task <task>] Use the JVM list for a specific task (Applets, WebStart, BundledApp, JNI, or CommandLine)
[-F/--failfast] Fail when filters return no JVMs, do not continue with default.
[ --exec <command> ...] Execute the $JAVA_HOME/bin/<command> with the remaining arguments.
[-R/--request] Request installation of a Java Runtime if not installed.
[-X/--xml] Print full JVM list and additional data as XML plist.
[-V/--verbose] Print full JVM list with architectures.
[-h/--help] This usage information.
所以,通过 /usr/libexec/java_home -v 1.8
这样的形式即可把 JDK 切到指定版本(这里是 8,当然,需要先安装对应的版本)。
然后给 bash/zsh 等 shell 添加上一个 function 就可以简单地来切换了,我用的是 fish,在 ~/.config/fish/functions/
下添加一个 setjdk.fish
,填写以下内容,那么就可以在终端中使用 setjdk 1.8
/ setjdk 9
的形式来切换到 JDK8 和 JDK9 了。
function setjdk
set -g -x JAVA_HOME (/usr/libexec/java_home -v $argv)
echo (java -version)
end