前言:
先来说明一下个人计算机上的一些情况,个人笔记本上最开始安装的jdk是11版本,后来因为开发需求改为了1.8,到最近安装BurpSuit2021版本又需要高版本的java环境于是又解压了一个jdk16,本以为只需要将环境变量里的JAVA_HOME修改成16版本的就可以了,没想到cmd一走java -version居然还是1.8,因此需要更改运行时的java环境。
一:查看本地环境变量
在配置jdk的时候一般都配置了JAVA_HOME,如此一来,如果想要更改本地jdk的版本,直接将JAVA_HOME的路径修改成自己想要的就可以了。
以及path的系统变量表:
但是问题来了,注意我系统path最上方还有两个路径
路径如下:
C:\Program Files\Common Files\Oracle\Java\javapath
C:\Program Files (x86)\Common Files\Oracle\Java\javapath
这两个路径之所以会出现,是因为我本地的java环境在版本变动后系统默认给我自动生成的,因为我最开始安装的是11,后来改为了8,所以出来了这么两条路径。而一旦有这两条路径压在我配置的jdk路径头上,即使我修改了JAVA_HOME,我个人配置的jdk环境还是得不到优先载入,系统最开始还是会去找最上面这两条路径里的环境。
而如果我们希望让自己配置的jdk优先生效,可以考虑把我们的jdk配置提到最前面。
如此一来我们就能够让系统优先载入了,而且再稍微修改一下注册表就能让环境生效了,可前提却是必须要重启电脑,于是我们将不采取这种方法。但是我们不想重启,于是想办法在系统开机的情况下把java的运行时版本给修改掉。
这就要依赖前面系统给我自动生成的两个路径了,因此我们保持环境变量不变,让C盘的两条javapath路径仍然占据在最前面。
二:探究javapath
我们先来看第一条路径C:\Program Files\Common Files\Oracle\Java\javapath
路径:C:\Program Files (x86)\Common Files\Oracle\Java\javapath
总共有java.exe 、javaw.exe、 javaws.exe、 javac.exe、 jshell.exe五个文件,其中javaws.exe在java8版本之后就已经没有了,而jshell.exe却是在java8版本之后才出现的,而根据测试,只需要将这两个目录里的文件都替换成我们对应的jdk/bin目录下的文件,再修改一下注册表就能成功修改java运行时的版本了。
此时我的java版本是16,我们想要把它修改成8版本,于是记得先把环境变量里的JAVA_HOME修改成1.8的路径。
于是进入我jdk1.8的bin目录,先把C:\Program Files\Common Files\Oracle\Java\javapath
的所有文件都删除,然后把java.exe 、javac.exe、 javaw.exe复制粘贴进去,jshell在1.8中没有所以不用管。
复制后:
然后将C:\Program Files (x86)\Common Files\Oracle\Java\javapath
里的所有文件删除,将java.exe、javaw.exe、javaws.exe复制粘贴进去。
win+r打开运行输入regedit打开注册表
找到路径计算机\HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit
下的CurrentVersion,将版本修改成我们当前更改的版本。
改为1.8
退出后重新输入java -version,发现运行时java环境已经修改成功了。
三:批处理脚本
最开头的几部,自然是把我们c盘javapath里的所有文件都删除掉,采用del命令。这里一定要加双引号,因为路径中有空格,不加会报错,提示找不到文件。虽然javaws在高版本没有,虽然jshell在低版本没有,但报错不影响执行。
del "C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java.exe"
del "C:\Program Files (x86)\Common Files\Oracle\Java\javapath\javaw.exe"
del "C:\Program Files (x86)\Common Files\Oracle\Java\javapath\javaws.exe" del "C:\Program Files\Common Files\Oracle\Java\javapath\java.exe"
del "C:\Program Files\Common Files\Oracle\Java\javapath\javac.exe"
del "C:\Program Files\Common Files\Oracle\Java\javapath\javaw.exe"
del "C:\Program Files\Common Files\Oracle\Java\javapath\jshell.exe"
然后是把我们jdk/bin下的众多文件给分别复制粘贴进去,使用copy命令。这里我是打算把原本java16的环境给修改成8的环境,因此没有copy对应的jshell文件。
copy [源文件] [目标路径]
copy "D:\java JKD\jdk1.8\bin\java.exe" "C:\Program Files (x86)\Common Files\Oracle\Java\javapath"
copy "D:\java JKD\jdk1.8\bin\javaw.exe" "C:\Program Files (x86)\Common Files\Oracle\Java\javapath"
copy "D:\java JKD\jdk1.8\bin\javaws.exe" "C:\Program Files (x86)\Common Files\Oracle\Java\javapath"copy "D:\java JKD\jdk1.8\bin\java.exe" "C:\Program Files\Common Files\Oracle\Java\javapath"
copy "D:\java JKD\jdk1.8\bin\javac.exe" "C:\Program Files\Common Files\Oracle\Java\javapath"
copy "D:\java JKD\jdk1.8\bin\javaw.exe" "C:\Program Files\Common Files\Oracle\Java\javapath"
接着是修改环境变量,使用wmic命令,这里的username=<system>指的是修改系统级别的变量。
wmic ENVIRONMENT where "name='[环境变量名]' and username='<system>'" set VariableValue="[对应的jdk路径]"
wmic ENVIRONMENT where "name='JAVA_HOME' and username='<system>'" set VariableValue="D:\java JKD\jdk1.8"
最后是修改注册表,使用reg add命令。
用法:reg add "[注册表对应条目路径,不加前面的计算机三个字]" /v "[需要修改的变量名]" /t REG_SZ /d "[想要修改成的值]" /f>nul
/v 指定修改的注册表变量名
/t 指定修改的数据类型
/d 指定想要修改成的数值
/f 不用询问信息而直接添加子项或项,且/f>nul输出为null
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit" /v "CurrentVersion" /t REG_SZ /d "1.8" /f>nul
最终将java16修改成java8环境的bat脚本:
del "C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java.exe"
del "C:\Program Files (x86)\Common Files\Oracle\Java\javapath\javaw.exe"
del "C:\Program Files (x86)\Common Files\Oracle\Java\javapath\javaws.exe" del "C:\Program Files\Common Files\Oracle\Java\javapath\java.exe"
del "C:\Program Files\Common Files\Oracle\Java\javapath\javac.exe"
del "C:\Program Files\Common Files\Oracle\Java\javapath\javaw.exe"
del "C:\Program Files\Common Files\Oracle\Java\javapath\jshell.exe" copy "D:\java JKD\jdk1.8\bin\java.exe" "C:\Program Files (x86)\Common Files\Oracle\Java\javapath"
copy "D:\java JKD\jdk1.8\bin\javaw.exe" "C:\Program Files (x86)\Common Files\Oracle\Java\javapath"
copy "D:\java JKD\jdk1.8\bin\javaws.exe" "C:\Program Files (x86)\Common Files\Oracle\Java\javapath"copy "D:\java JKD\jdk1.8\bin\java.exe" "C:\Program Files\Common Files\Oracle\Java\javapath"
copy "D:\java JKD\jdk1.8\bin\javac.exe" "C:\Program Files\Common Files\Oracle\Java\javapath"
copy "D:\java JKD\jdk1.8\bin\javaw.exe" "C:\Program Files\Common Files\Oracle\Java\javapath"wmic ENVIRONMENT where "name='JAVA_HOME' and username='<system>'" set VariableValue="D:\java JKD\jdk1.8"
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit" /v "CurrentVersion" /t REG_SZ /d "1.8" /f>nul
右键管理员权限运行即可成功修改。
顺便贴一下将1.8修改成16版本的批处理脚本:
del "C:\Program Files (x86)\Common Files\Oracle\Java\javapath\java.exe"
del "C:\Program Files (x86)\Common Files\Oracle\Java\javapath\javaw.exe"
del "C:\Program Files (x86)\Common Files\Oracle\Java\javapath\javaws.exe" del "C:\Program Files\Common Files\Oracle\Java\javapath\java.exe"
del "C:\Program Files\Common Files\Oracle\Java\javapath\javac.exe"
del "C:\Program Files\Common Files\Oracle\Java\javapath\javaw.exe"
del "C:\Program Files\Common Files\Oracle\Java\javapath\jshell.exe"copy "D:\java JKD\history_version_package\jdk16\win\jdk-16\bin\java.exe" "C:\Program Files (x86)\Common Files\Oracle\Java\javapath"
copy "D:\java JKD\history_version_package\jdk16\win\jdk-16\bin\javaw.exe" "C:\Program Files (x86)\Common Files\Oracle\Java\javapath"copy "D:\java JKD\history_version_package\jdk16\win\jdk-16\bin\javaw.exe" "C:\Program Files\Common Files\Oracle\Java\javapath"
copy "D:\java JKD\history_version_package\jdk16\win\jdk-16\bin\java.exe" "C:\Program Files\Common Files\Oracle\Java\javapath"
copy "D:\java JKD\history_version_package\jdk16\win\jdk-16\bin\javac.exe" "C:\Program Files\Common Files\Oracle\Java\javapath"
copy "D:\java JKD\history_version_package\jdk16\win\jdk-16\bin\jshell.exe" "C:\Program Files\Common Files\Oracle\Java\javapath"
wmic ENVIRONMENT where "name='JAVA_HOME' and username='<system>'" set VariableValue="D:\java JKD\history_version_package\jdk16\win\jdk-16"
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit" /v "CurrentVersion" /t REG_SZ /d "1.16" /f>nul