一、问题描述及现象
在Windows系统中安装多个JDK版本后,配置JAVA_HOME至指定版本后,执行java -version
后仍显示原配置JDK版本或者最高版本JDK
1.1 安装不同JDK版本
本次测试共安装四个不同JDK版本,JDK1.6,1.8,11,16。
1.2 环境变量
未配置为JDK1.8
已配置环境变量
1.3 执行java -version
# 执行版本查询
java -vesion
# 查询结果均为最高版本JDK
PS C:\Users\Administrator> java -version
java version "16.0.1" 2021-04-20
Java(TM) SE Runtime Environment (build 16.0.1+9-24)
Java HotSpot(TM) 64-Bit Server VM (build 16.0.1+9-24, mixed mode, sharing)
PS C:\Users\Administrator>
无论是否配置环境变量都会失效,且环境变量默认为JDK最高版本
二、问题原因分析
2.1 有其他环境变量配置
当使用安装版本的JDK程序时(一般是1.7版本以上),在安装结束后安装程序会自动将java.exe、javaw.exe、javaws.exe三个可执行文件复制到C:\Windows\System32
目录。
2.2手动配置环境变量优先级较低
C:\Windows\System32
目录目录在WINDOWS环境变量中的优先级高于JAVA_HOME设置的环境变量优先级,故此直接更改JAVA_HOME会无效。
另外,JDK1.8安装版本,还会在C:\ProgramData\Oracle\Java
目录中生成一些配置文件,并同时将此目录写到环境变量中的Path中。
三、如何解决
3.1 直接删除文件
删除C:\Windows\System32目录
下的java.exe、javaw.exe、javaws.exe三个文件
删除环境变量Path中C:\ProgramData\Oracle\Java\javapath
的配置
3.2 提升环境变量优先级
手动配置JAVA_HOME
,并把path
里%JAVA_HOME%\bin
放在path
变量的最前面
手动配置JDK1.8环境变量成功!
3.3 快速切换环境变量到指定JDK版本
实际Windows本机测试时,由于项目不同,打包本机测试时,运行需要指定版本JDK环境。
3.3.1配置多个JAVA_HOME
只需更改
JAVA_HOME
的地址,无需修改Path
配置。
3.3.2 切换效果
注意:环境变量切换完成后,要重启DOS窗口,DOS窗口打开时会重新加载环境变量。
-
JDK 1.8
-
JDK 11.0
-
JDK 16.0
-
JDK 1.6
以上,请参考,谢谢!