背景
mac 上安装了多个 jdk 版本,而 MacOS 默认会选择在 /Library/Java/JavaVirtualMachines 目录下的最新版本作为当前JDK版本,但是我们有的时候又不想使用当前这个默认版本,接下来解决如何随意切换 jdk 版本的骚操作了。
查看
macOS 下 JDK 默认安装路径:/Library/Java/JavaVirtualMachines
快速查看 已安装的 JDK 相关信息:/usr/libexec/java_home -V
快速查看 当前使用 JDK 相关信息:/usr/libexec/java_home
快速查看 指定版本 JDK 相关信息:/usr/libexec/java_home -v 1.8...
切换版本
命令行快速切换 jdk 版本:export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
修改配置设置默认 jdk 版本:
vim ~/.bash_profile # switch to java version 8 export JAVA_HOME=`/usr/libexec/java_home -v 1.8` # close wq and update setting source ~/.bash_profileb
别名配置
需要根据自己实际已经安装的 JDK 做增减
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"
使用效果
➜ ~ j7 java version "1.7.0_80" Java(TM) SE Runtime Environment (build 1.7.0_80-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode) ➜ ~ j8 java version "1.8.0_201" Java(TM) SE Runtime Environment (build 1.8.0_201-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode) ➜ ~ j11 openjdk version "11.0.4" 2019-07-16 OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.4+11) OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.4+11, mixed mode)
修改 JDK 版本号
我们还可以通过修改版本号实现指定版本的JDK做为默认JDK, 我目前正在使用该方式。
/usr/libexec/java_home
是通过:/Library/Java/JavaVirtualMachines/<JDK>/Contents/Info.plist
里的 JVMVersion
值来获取版本号的,
所以只需要修改这个值为当前最大版本号即可实现指定默认 JDK。经过测试这个还是即时生效。
像我安装过 adoptopenjdk 11 ,但还是希望 adoptopenjdk 8 做为默认 JDK,只需要把 /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Info.plist
里的 JVMVersion
的值由 1.8.0_222
改为 x1.8.0_222
(大概第42行)。
排序是通过 ASCII 值来排的,版本号只要改的比最新的 11 大都行,字符'x'的ASCII值远大于字符'1', 为了方便版本区分我只加了一个字符 x 。
修改完成之后再查看 JDK 信息,就会发现我们修改的x1.8.0_222会排到第一位,同时 Java version 是 1.8。
➜ ~ /usr/libexec/java_home -V Matching Java Virtual Machines (4): x1.8.0_222, x86_64: "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home 11.0.4, x86_64: "AdoptOpenJDK 11" /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home 1.8.0_201, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home 1.7.0_80, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home ➜ ~ java -version openjdk version "1.8.0_222" OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_222-b10) OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.222-b10, mixed mode)