MAC下JDK随意切换

背景

  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)

 

上一篇:MySQL - 数据库的隔离级别


下一篇:解决开发者短缺困境,也许它能帮到你