Java 多版本配置
# Java 多版本配置
有时候,我们需要用到多个版本的 Java。
# 前言
虽然目前 Java8 是用的最广泛的,但有时候工作中我们需要用到其他版本的 Java:
- 工作中负责维护的系统是十几年前的老古董,用的是 Java5
- 为了学习 Java 新版本的特性,需要用新版本的 Java
- 有时候为了工作需要,还要版本之间来回切换;如果说每次切换都重新卸载和安装 Java 的话,太麻烦了
在开发阶段,多个版本的 JDK 可以同时安装,当前使用的 JDK 版本可由 JAVA_HOME
环境变量切换。
本文主要在 Windows 下配置,描述如何快速切换 Java 版本。阅读本文前,读者应该具有在电脑上安装 Java 的经验。
# Java 版本介绍
我们打开官网看看 Java 的各个版本的发布信息:Oracle Java SE Support Roadmap (opens new window),可以看到有这样一个表格
Release | GA Date | Premier Support Until | Extended Support Until | Sustaining Support |
---|---|---|---|---|
7 (LTS) | July 2011 | July 2019 | July 2022 | Indefinite |
8 (LTS) | March 2014 | March 2022 | December 2030 | Indefinite |
9 (non‑LTS) | September 2017 | March 2018 | Not Available | Indefinite |
10 (non‑LTS) | March 2018 | September 2018 | Not Available | Indefinite |
11 (LTS) | September 2018 | September 2023 | September 2026 | Indefinite |
12 (non‑LTS) | March 2019 | September 2019 | Not Available | Indefinite |
13 (non‑LTS) | September 2019 | March 2020 | Not Available | Indefinite |
14 (non‑LTS) | March 2020 | September 2020 | Not Available | Indefinite |
15 (non‑LTS) | September 2020 | March 2021 | Not Available | Indefinite |
16 (non-LTS) | March 2021 | September 2021 | Not Available | Indefinite |
17 (LTS) | September 2021 | September 2026 | September 2029 | Indefinite |
18 (non-LTS) | March 2022 | September 2022 | Not Available | Indefinite |
19 (non-LTS) | September 2022 | March 2023 | Not Available | Indefinite |
20 (non-LTS) | March 2023 | September 2023 | Not Available | Indefinite |
21 (LTS) | September 2023 | September 2028 | September 2031 | Indefinite |
第一列是 Java 的版本,第二列是 Java 发布的日期,第三列是支持维护的日期(如果该版本有问题,需要修复,那么就会在这个版本上进行更新,等到了 2022 年后,如果有 bug 就不会维护了)
为什么第一列的版本后面有个 LTS 和 non-LTS?LTS 是指 Long-Term-Support,长期支持版;相当于只要有 bug,就会修复;而如果不是 LTS 版(non-LTS),有 bug 的话等到了维护期限就不管了;那我们肯定就是使用长期支持版,不然有问题谁解决呢,是吧 😅
可以看到 2014 年,Java8 就已经发布了,为什么现在还很多人用?因为当时只有它是 LTS 版,所有人都用这个版本;到了后期升级 JDK 版本是非常麻烦的事情,需要考虑和测试的东西很多,所以少有公司愿意花这个精力去升级。
鱼皮如是说:
Spring Boot 船新版本?我却很失望 (opens new window)
1)兼容性
Java 一直是主流的企业开发语言,存量项目非常多,大部分的老项目和类库支持都是 Java 8 及以下的版本,如果强行升级了 JDK 这种基础环境,很难保证项目的运行和之前完全一致。
我自己就经历过一次 JDK 8 升级 JDK 11 的大坑,升级后项目虽然能跑,但在做一个导出 Excel 表格功能时,升级版本后部分字符就乱码了,折腾了好久才搞定,比做几个新需求还心累。
所以还是谨记编程铁律第一条:程序能运行,就不要动它。
2)稳定性
Java 8 已经经过成千上万个企业项目的检验,都很难做到绝对的稳定。如果用一个新版本的 Java,很难说会遇到什么乱七八糟的线上问题,所以建议规模较大的项目慎用太新的东西。
3)生态不足
现在网上的项目教程也好、解决 Bug 的博客方案也罢,几乎都是基于 Java 8 的。如果你使用高版本的 Java,哪怕是同样的代码,可能项目也根本运行不起来,可能还有一些语法细节的不一致等。而且你可能在网上都搜不到相关的解决方案,这个对于 Java 开发经验不足的同学来说,是非常致命的。为什么不建议大家学习小众编程语言,也有这个原因。
我印象中自己使用 Java 11 的时候就遇到过一些莫名其妙的小 Bug,很多是去 stack overflow 等国外平台才找到了解决方案。
# Java11 的安装和配置
先下载 Java11 的安装包。官网下载链接:Java Downloads | Oracle (opens new window)
注意选择是具体平台的,这里选 Windows,下载完后直接一路默认安装即可。这里笔者的安装路径为:
C:\Program Files\Java\jdk-11.0.17
需要注意的是,Java11 给 path 变量加了不少东西,我们打开环境变量 path,然后将 JAVA 的配置 上移到最上面。
然后修改 JAVA_HOME 路径为 Java11 的安装路径。
我们打开一个新的 cmd,查看 Java 版本:
C:\Users\peterjxl>java -version
java version "11.0.17" 2022-10-18 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.17+10-LTS-269)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.17+10-LTS-269, mixed mode)
2
3
4
# 一键切换 Java 版本
如果每次切换版本,都重新打开环境变量,然后找到 Java 的安装目录,修改环境变量,稍微有一点麻烦;我们可以借助 Windows 的 bat 快速切换 Java 版本。
如果要切换为 Java8,新建一个文件文件,然后输入以下内容:
@echo off
setx JAVA_HOME "C:\Program Files\Java\jdk1.8.0_281" /M
@echo "switch to Java8 finish!"
pause
2
3
4
注意 Java8 的路径请自行更改,然后修改该文本文件的后缀为.bat。例如笔者的文件名为 “切换为 Java8.bat”
切换为 Java11 同理,新建一个文件文件,然后输入以下内容:
@echo off
setx JAVA_HOME "C:\Program Files\Java\jdk-11.0.17" /M
@echo "switch to Java11 finish!"
pause
2
3
4
注意 Java8 的路径请自行更改,然后修改该文本文件的后缀为.bat
然后双击 bat 即可运行。如果运行的时候提示拒绝访问,请尝试管理员权限运行:在 bat 文件上右键--以管理员身份运行。然后重新打开 cmd 验证 Java 版本即可。