我们在把JDK路径配置为环境变量时,有一个常用的配置方法,就是把JDK根路径配置为“JAVA_HOME”值,然后在Path中添加一条“%JAVA_HOME%\bin”值。这种方法很便于修改JDK的版本,只要在更换版本时调整JAVA_HOME的内容便可以。但是,这种配置方式往往会引发一个错误,下面详细说明这个错误。
错误表现“JAVA_HOME”中不仅可以设置单个值,也可以像Path内容一样,用分号隔开,设置多个值。例如,计算机中有“9.0.1”和“15.0.1”两个版本的JDK,我们可以把两个版本的JDK都添加进“JAVA_HOME”中,如图:
当然,这样使用是没有错误的。但是,当我们想要从中删除一个值,只留下一个版本时,比如只留下“jdk-15.0.1”,那我们就会点击第二行,并点击右边的删除,此时,回到命令行使用java编译时,我们会发现,剩下的那个版本的jdk也不能被正确定位了。
错误溯源定位到jdk的目录下,如果可以看到“java.dll”,“java.exe”,“javac.exe”等文件都是存在的,说明该错误的原因不是jdk被破坏。回忆一下刚才删除“JAVA_HOME”值的操作,此时再查看“JAVA_HOME”环境变量,并没有发现什么异常:
但是,打开“Path”环境变量的编辑界面,细心的话可以看到它从列表模式变成了编辑文本的模式:
在“Path”中存在多条环境变量的值时,变成编辑文本模式意味着它可能是有错误的。重新回到CMD中,输入echo %Path%命令,把Path环境变量打印到命令行进行查看,可以发现一个明显的错误,如图:
在箭头所示的地方,看到jdk的路径中错误地插入了一个分号,说明“%JAVA_PATH%”解析出来的文本串后面带上了一个分号。重新编辑“JAVA_HOME”环境变量,点击右下角的“编辑文本”按钮,在编辑文本模式中,我们发现结尾有一个显眼的分号:
把这个分号删除之后,保存,回到命令行调试,java命令正常运行了。
解决方法
当存在多条环境变量时,系统会自动地以分号分隔开它们,且不会带来异常。但是,当从多条环境变量删除到仅剩一条时,系统会遗留下一个分号。我们使用“%JAVA_HOME%\bin”这样的方式去配置Path时,由于“%JAVA_HOME%”直接解析为文本,遗留的分号就会带来错误。
如果原来的环境变量是多个值,想要删除到仅剩一个值时,一定要记得删除这个分号,或者直接用编辑文本模式去删除,以防止引入不必要的错误。
希望这篇文章可以帮助到大家!
附:
系统信息:版本 Windows 10 专业版
版本号 20H2
操作系统内部版本 19042.867
jdk版本
jdk-15.0.1
jdk-9.0.1