bat脚本实现java版本切换
目标效果:在windows上安装jdk8和jdk21,使用bat脚本对jdk的环境变量进行修改,从而实现jdk版本的切换
安装jdk8和jdk21
安装完毕后,分别新增jdk8的系统变量JAVA8_HOME和jdk21的系统变量JAVA21_HOME,二者的值就是其安装路径

然后新增一个名为JAVA_HOME的系统变量,值暂时指定为%JAVA8_HOME%

将JAVA_HOME添加到Path中

测试一下jdk8是否生效

再将JAVA_HOME的值改为%JAVA8_HOME%,并测试一下jdk21是否生效


接下来就是编写bat脚本,动态修改JAVA_HOME的值即可,想要切换版本为jdk8就将它的值改为%JAVA8_HOME%,同理jdk21就改为%JAVA21_HOME%
bash@echo off setx JAVA_HOME "%JAVA8_HOME%" /M start cmd /k echo JAVA -version=8bash@echo off setx JAVA_HOME "%JAVA21_HOME%" /M start cmd /k echo JAVA -version=21两个bat脚本都需要右键 → 管理员身份执行,如果不想每次都用管理员身份执行,可以为两个脚本创建快捷方式,然后修改快捷方式的高级属性,勾选管理员身份运行


bat脚本修改了JAVA_HOME的值(如下图所示,我的环境变量已经成功地从21的地址变成了8的地址),但是java -version依旧没变的问题解决方案
问题原因:首先通过命令行执行where java发现,系统安装的oracle的jdk被写入了Path中,而java查找jdk时是按照从前到后依次查找,所以始终无法找到JAVA_HOME配置的jdk


解决方案:所以修改Path的配置,将JAVA_HOME的配置上移到最上面

另外:还有一种情况就是,安装某一特定版本的jdk时,会自动将 java.exe、javaw.exe、javaws.exe 复制到 C:\Windows\System32 目录下,这个目录在windows的环境变量中的优先级高于JAVA_HOME设置的环境变量的优先级,所以如果存在的话也要记得删除
参考文档