MAC
mac 下我们使用/usr/libexec/java_home 来控制 jdk 版本的切换
1. 查看当前系统安装过哪些 JDK 版本(若不存在, 请先自行安装)
1
| usr/libexec/java_home -V
|
结果如下(忽略安装了两个版本的 JDK1.8)
1 2 3 4 5 6
| Matching Java Virtual Machines (4): 11.0.2 (x86_64) "Oracle Corporation" - "Java SE 11.0.2" /Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home 1.8.0_292 (x86_64) "AdoptOpenJDK" - "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home 1.8.0_102 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home 1.7.0_80 (x86_64) "Oracle Corporation" - "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home /Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home
|
2. 根据关键字查看 jdk 安装目录
1
| /usr/libexec/java_home -v 11
|
结果如下
1
| /Library/Java/JavaVirtualMachines/jdk-11.0.2.jdk/Contents/Home
|
同样的, 查看 JDK8 如下
1
| /usr/libexec/java_home -v 1.8
|
结果如下
1
| /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
|
当如上命令正确执行无误的时候, 我们就可以开始来通过编辑环境变量来动态的进行改变 JDK 环境
3. 编辑~/.bash_profile(也许是.zshrc 等其他配置文件)
内容如下
1 2 3 4 5 6 7 8 9 10
| # jdk # 计算当前版本JDK的安装位置,因为在上面我们已经将2个JDK都放在了 /Library/Java/JavaVir tualMachines/ export JAVA_8_HOME=`/usr/libexec/java_home -v 1.8` export JAVA_11_HOME=`/usr/libexec/java_home -v 11`
# 设置默认的环境是JDK11 export JAVA_HOME=$JAVA_11_HOME # 添加两个别名,用来快速更好JDK环境 alias JDK8="export JAVA_HOME=$JAVA_8_HOME" alias JDK11="export JAVA_HOME=$JAVA_11_HOME"
|
应用编辑过后的环境变量
4. 切换 JDK 版本
执行完毕之后, 我们就可以使用别名来动态的切换 jdk 版本了, 如下
查看当前系统 jdk 版本
1 2 3 4
| ~ java -version java version "11.0.2" 2019-01-15 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.2+9-LTS) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode)
|
切换为 jdk8
查看
1 2 3 4
| ~ java -version openjdk version "1.8.0_292" OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_292-b10) OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.292-b10, mixed mode)
|
重新切换为 jdk11
查看
1 2 3 4
| ~ java -version java version "11.0.2" 2019-01-15 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.2+9-LTS) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode)
|
至此, MAC 下多个版本的 JDK 管理脚本调整完毕
Linux
思路: 尝试过使用了上述的方式, 来动态调整 JAVA_HOME 的目录, 但是发现, PATH 内的 JAVA_HOME 没有动态获取改变后的目录, 因此尝试使用软连接的思路来动态改变 jdk 的目录.
失败案例
使用 ln -sf 把 jdk8 和 jdk11 指向同样的目录下, 第一次可以正常执行, 第二次执行的时候会进入到软连接的真实目录下创建一个软连接, 大家可以自行尝试, 也可能我的方式不对. 当然了, 也可以先删除, 后创建, 但是感觉略显麻烦.
1. 使用 alertnatives 创建软连接
jdk8
1 2
| # 命令 --安装 软连接 名称 安装路径 alternatives --install /data/java java /data/jdk8 1
|
jdk11
1 2
| # 命令 --安装 软连接 名称 安装路径 alternatives --install /data/java java /data/jdk11 2
|
2. 配置环境变量
1 2 3 4 5
| # 执行软连接目录 export JAVA_HOME=/data/java
export PATH=${JAVA_HOME}/bin:${PATH} export CLASSPATH=${JAVA_HOME}/lib:${CLASSPATH}
|
3. 切换 jdk 版本
- 手动选择切换
1 2 3 4 5 6 7 8 9 10 11
| [root@localhost ~]# alternatives --config java
共有 2 个提供“java”的程序。
选项 命令 ----------------------------------------------- + 1 /data/jdk8 * 2 /data/jdk11
按 Enter 保留当前选项[+],或者键入选项编号:
|
- 命令直接切换
jdk11
1
| [root@localhost ~]# alternatives --set java /data/jdk11
|
查看
1 2 3 4
| [root@localhost ~]# java -version openjdk version "11" 2018-09-25 OpenJDK Runtime Environment 18.9 (build 11+28) OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
|
jdk8
1
| [root@localhost ~]# alternatives --set java /data/jdk8
|
查看
1 2 3 4
| [root@localhost ~]# java -version java version "1.8.0_112" Java(TM) SE Runtime Environment (build 1.8.0_112-b15) Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)
|
这种方式有一种弊端, 就是切换的时候是全局的, 当多人访问该服务器, 一个人切换了软连接, 那所有人都会跟着变了当前的 jdk 版本
后续
当然前面那种通过更改环境变量的方式, 也可以通过更改 PATH 来实现
1 2 3
| alias JDK8="export JAVA_HOME=/data/jdk8 && export PATH=/data/jdk8/bin:${M2_HOME}/bin:${PATH} && export CLASSPATH=/data/jdk8/lib:${CLASSPATH}"
alias JDK11="JAVA_HOME=/data/jdk11 && PATH=$/data/jdk8/bin:${M2_HOME}/bin:${PATH} && CLASSPATH=$/data/jdk8/lib:${CLASSPATH}"
|
但是该方式可能会导致 PATH 变的很长, 如果 PATH 本身不是很长, 可以考虑把 PATH 路径写完整, 不持续拼接上一个 PATH