windows快速切换jdk版本号
# 前言因为老项目和新项目的需要,在电脑上需要切换jdk1.8和jdk17(其它版本jdk同样可以切换)。网上有修改配置文件的方式,但是感觉比较繁琐,后来找到了通过bat文件和环境变量来快速切换jdk环境的方法。这里记录分享出出来,
只需要通过命令行即可完成切换。
---
# 1 效果图
管理员身份运行cmd窗口
![在这里插入图片描述](https://img-blog.csdnimg.cn/95dd8530359b4743bee15f876a8463ae.png)
> 效果图 打开新的命令行窗口
![在这里插入图片描述](https://img-blog.csdnimg.cn/f81a4248db824251bd3b92652e34e351.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/c7f2ef921789486ea1bed85644b4794f.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/e3b82be6449f4f2d92edaf8d98f04c87.png)
# 2 安装需要切换的jdk并配置环境变量
[官网jdk下载地址](https://www.oracle.com/java/technologies/downloads/)
![在这里插入图片描述](https://img-blog.csdnimg.cn/8b5c42b076a14c63aff58b35e156e731.png)
通过官网下载需要的jdk
> 网上有很多说,通过exe或msi安装的jdk会默认该什么文件,导致切换不生效,所以如果大家还没有下载安装,就直接下载zip的压缩包,自己解压配置环境吧。
当然,如果已经安装好了,或者只安装了一个也不用卸载,下面我会分享自己遇到的不生效解决方案,如果遇到应该也可以解决你的问题。
我的安装目录:
![在这里插入图片描述](https://img-blog.csdnimg.cn/7d0f9cb225904fd19cb3069457410a89.png)
# 3 环境变量配置
环境变量配置:
如果你已经安装配置过一个jdk的环境变量,那么就按照下面修改即可。
如果没有配置过,可以看着我下面的配置文件配置,或者留言给我。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f23fa4ca71c54d3aacdee3b217b56904.png)
选择系统变量,点击新建,输入变量名JAVA_HOME,变量值为JDK的bin目录所在路径。如图:
注意不用带bin
![在这里插入图片描述](https://img-blog.csdnimg.cn/1ee04bfb657447bdb7731291b67ad57a.png)
选择系统变量,找到Path变量,点击编辑。
点击新建,输入%JAVA_HOME%\bin,点击确定。
![在这里插入图片描述](https://img-blog.csdnimg.cn/6ec9f13b02be4f0890e2baeb583c841f.png)
配置脚本所在目录
这样打开cmd输入bat脚本名就可以执行
![在这里插入图片描述](https://img-blog.csdnimg.cn/d8be30acb37140bb807f1a2969e393c9.png)
# 4 bat脚本
根据下面配置文件的注解,修改一下自己jdk和环境变量刷新程序的路径即可。
```bat
@echo off
rem --- Base Config 配置JDK的安装目录---
:init
set JAVA_HOME_1_7=C:\Program Files\Java\jdk-17.0.6
set JAVA_HOME_1_8=C:\Program Files\Java\jdk1.8.0_162
rem 刷新环境变量的程序,绝对路径
set RefreshEnv=C:\Progra~1\Java\cut_jdk\RefreshEnv.exe
echo 当前使用的JDK版本:
echo =============================================
java -version
echo.
echo =============================================
echo jdk版本列表〃
echo 8
echo 17
echo =============================================
:select
set /p opt=请选择jdk版本:
if %opt%==8 (
set TARGET_JAVA_HOME=%JAVA_HOME_1_8%
)
if %opt%==17 (
set TARGET_JAVA_HOME=%JAVA_HOME_1_7%
)
echo 当前选择的Java路径:%TARGET_JAVA_HOME%
wmic ENVIRONMENT where "name='JAVA_HOME'" delete
wmic ENVIRONMENT create name="JAVA_HOME",username="<system>",VariableValue="%TARGET_JAVA_HOME%"
rem 刷新环境变量
call %RefreshEnv%
echo 按任意键退出!
pause>nul
@echo on
```
`刷新环境变量的程序放在文章最后`
这里有个配置需要注意,如果你的程序放在了 C:\Program Files 目录下
![在这里插入图片描述](https://img-blog.csdnimg.cn/1bfebe40b90b4004b9fd2e79df447358.png)
那么路径就要配置成:
> C:\Progra~1\
![在这里插入图片描述](https://img-blog.csdnimg.cn/6604e4fdb30949488ad015272ab93479.png)
其它路径直接复制粘贴过来即可
# 5 不生效问题解决
## 问题1 不生效
更换jdk版本且修改环境变量并不能生效,如原本安装了1.8,现更换为1.7,且配置了环境变量,但是java -version仍显示1.8。
> 原因
当使用安装版本的JDK程序时(一般是1.7版本以上),在安装结束后安装程序会自动将java.exe、javaw.exe、javaws.exe三个可执行文件复制到C:\Windows\System32目录,这个目录在WINDOWS环境变量中的优先级高于JAVA_HOME设置的环境变量优先级,故此直接更改JAVA_HOME会无效。
另外,JDK1.8安装版本,还会在C:\ProgramData\Oracle\Java目录中生成一些配置文件,并同时将此目录写到环境变量中的Path中。
> 解决
删除C:\Windows\System32目录下的java.exe、javaw.exe、javaws.exe三个文件
删除环境变量Path中C:\ProgramData\Oracle\Java\javapath的配置
`我的C:\Windows\System32 中并没有这三个文件,但是删除了环境变量里上面的配置生效了一次`
如果还不生效,再path中,将java的配置移动到最上面
![在这里插入图片描述](https://img-blog.csdnimg.cn/6ec9f13b02be4f0890e2baeb583c841f.png)
## 问题2 运行命令时,报找不到可执行的程序
这个问题主要就是如果你的刷新环境变量工具如果放在了
C:\Program Files 目录下
配置会报找不到程序。
![在这里插入图片描述](https://img-blog.csdnimg.cn/6482545b543a49abae88428a83bae4b7.png)
路径需要改成
那么路径就要配置成:
> C:\Progra~1\
![在这里插入图片描述](https://img-blog.csdnimg.cn/04e76b60989c4378bd60453394935580.png)
# 6 源码 demo
jdk1.8 -- 自行下载
jdk17 -- 自行下载
cutjdk.bat-- 见文章 目录4 bat脚本
RefreshEnv.exe -- 脚本刷新工具 [传送门](https://download.csdn.net/download/qq_44850489/87412391)
![在这里插入图片描述](https://img-blog.csdnimg.cn/fe97e7ed6342464e84c7b88da5c9c55b.gif#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/0df153d348774b0fa8ad9a91c265eae7.png)
`到这里基本都可以实现大家的需求,麻烦大家帮文章点点赞喽!没有c币的小伙伴,帮忙多给我文章多点点赞私信我给你` 不用这么麻烦
用powershel的new-alias就行了
类似于Linux 中 alternative 命令
场景:电脑有多个 Java 版本,当用户试图在命令行调用非环境变量(PATH)的 java.exe时,通常需要费尽心思找到它们的完整路径
比如:
"D:\ProgramData\.jdks\openjdk-16.0.2\bin\java.exe" -jar core.jar
我们仅需在 powershell 中执行
ps> New-Alias -Name java16 -Value "D:\ProgramData\.jdks\openjdk-16.0.2\bin\java.exe"
如果你还有其他版本的 Java,可以定义多个别名
ps> New-Alias -Name java18 -Value "D:\ProgramData\.jdks\openjdk-18.0.4\bin\java.exe"
这样下次调用仅需要:
java16 -jar core.jar
java18 -jar core.jar 谢谢分享,学习了。 谢谢分享。 龙猫不错。谢谢 谢谢分享,学了一招。 想当年我连变量环境都不会配置,一晃这么多年过去了,还是不会{:1_924:} 好东西,支持一下 firo1603 发表于 2023-2-3 16:43
不用这么麻烦
用powershel的new-alias就行了
类似于Linux 中 alternative 命令
大佬 请教一下:
我按照你说的报了这个错误:
Error: Unable to access jarfile core.jar
可以指点一下吗 黑白客 发表于 2023-2-4 17:26
大佬 请教一下:
我按照你说的报了这个错误:
Error: Unable to access jarfile core.jar
你本地没有core.jar这个文件当然报错啊,改成你自己打包的jar程序
页:
[1]
2