作为一名Java程序员,我们经常需要在不同的Java版本下运行我们的应用程序,或者,我们想在不同Java版本上尝试运行我们的代码。当然,如果你在IDE下工作,可以非常轻松地切换Java版本(大部分IDE都提供该功能),但是如果你只想在CMD下运行Java程序,而又不想频繁地去修改系统环境变量,有什么好的办法呢?
本文将向你介绍如何在Windows中同时安装多个Java版本,以及如何通过命令行非常简单地在不同地Java版本间进行切换。
安装多个不同版本的Java
在Windows中同时安装多个Java版本非常容易,你只需要下载并运行每个版本的安装程序,它们会自动安装到不同的目录中
下载不同版本的Java
- Java SE 1.1 - 该版本不能运行在64位Windows上
- Java SE 1.2 - 默认安装到目录C:jdk1.2.2和C:Program Files (x86)JavaSoftJRE1.2 - 推荐安装到目录C:Program Files (x86)Javajdk1.2.2和目录C:Program Files (x86)Javajre.1.2.2。
- Java SE 1.3 - 默认安装到目录C:jdk1.3.1_28 - 推荐安装到目录C:Program Files (x86)Javajdk1.3.1_28。
- Java SE 1.4 - 默认安装到目录C:j2sdk1.4.2_19 - 推荐安装到目录C:Program Files (x86)Javajdk1.4.2_19。
下面这些版本不用修改安装目录,直接默认安装:
注意:以下Oracle发行版只能用于个人开发,不能应用于商业软件开发:
- Java SE 11 / OpenJDK 11
- Java SE 12 / OpenJDK 12
- Java SE 13 / OpenJDK 13
- Java SE 14 / OpenJDK 14
- Java SE 15 / OpenJDK 15
- Java SE 16 / OpenJDK 16
以下最新版本仅可用于测试:
注意,由于Oracle版权的问题,我们推荐下载OpenJDK版本:
环境变量
大部分情况下,我们都可以通过以下两个环境变量来确定当前应用程序使用的是哪个Java版本:
- JAVA_HOME - 多数脚本使用该环境变量来确定Java版本的位置。
- Path - 当从控制台运行Java二进制文件(如iava和javac)时,使用的是该环境变量。
手动设置环境变量
上面列出来的Java安装程序在安装过程中都会自动创建环境变量,首先我们需要手动清除掉这些环境变量。最简单的方式是使用Windows搜索栏,输入“env”,然后打开"Edit the system environment variables"。当然,你也可以打开Windows资源管理器,右键单击“我的电脑”,选择“属性”,在打开的窗口中点击“高级系统设置”,然后打开“环境变量”。
如下图所示,
- "User variables"中应该不包含任何与Java相关的环境变量。
- "System variables"中应该包含"JAVA_HOME"环境变量并且指向你本地所安装的其中一个Java版本的目录(我当前安装的是Java 16)。如果"JAVA_HOME"环境变量不存在,则需要手动添加。
- 删除“Path”环境变量中与Java相关的值,如:
- C:ProgramDataOracleJavajavapath
- C:Program Files (x86)Common FilesOracleJavajavapath
- 同时在"Path"环境变量中添加:
- %JAVA_HOME%in
修改完之后的“Path”环境变量的值看起来像这样:
这里的“%JAVA_HOME%in”确保当程序查找“Path”环境变量时,找到的Java版本的位置与“JAVA_HOME”环境变量中所对应的位置是一致的。
现在打开控制台,输入下面的命令来检查以上设置是否有效:
echo %JAVA_HOME% java -version
如果你看到下图所示的结果,则表示设置没有问题:
添加切换Java版本的脚本
接下来我们将为每个Java版本添加一个脚本文件,以方便在多个不同Java版本间进行快速切换。我将这些脚本文件存放到目录C:|Program FilesJavascripts中,然后将该目录添加到"Path"环境变量:
这些脚本文件被命名为java16.bat、java15.bat、java14.bat、java14.bat、java13.bat等等,在每一个脚本文件中,我们会修改当前“JAVA_HOME”环境变量的值为对应Java版本的位置。例如下面是java16.bat脚本文件的内容:
@echo off set JAVA_HOME=C:Program FilesJavajdk-16 set Path=%JAVA_HOME%in;%Path% echo Java 16 activated.
这个脚本很简单,我们在“Path”变量值的开头部分插入了当前要切换的Java版本所对应目录的位置,该位置是Java版本目录中Java.exe可执行文件的位置,因此,每一次Java版本的切换都会导致“Path”变量的值增加,不过这个只会影响当前打开的控制台,当控制台被关闭后该操作也就失效了。
下面这个ZIP文件包含了从Java 1.2到Java 17的所有脚本,你可以下载以供参考:scripts-up-to-jdk17.zip
最后,让我们来快速测试一下我们的脚本是否能正常工作。注意,将目录C:|Program FilesJavascripts添加到“Path”环境变量后,你需要打开一个新的控制台来获取新添加的环境变量的值。
关掉该控制台,然后重新打开一个控制台,输入"java -version",你会看到当前Java版本又恢复到默认版本了。