作者名称:DaenCode
作者简介:CSDN实力新星,后端开发两年经验,曾担任甲方技术代表,业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开发。技术尚浅,闭关学习中······
人生感悟:尝尽人生百味,方知世间冷暖。
所属专栏:工具合集
链接>>>>>>>>>
《Redis从头学》链接>>>>>>
《SpringBoot实战》在学习或者工作中,可能会使用到多个版本的JDK,每次修改环境变量都很麻烦。因此,在这里我现学现卖,使用Python结合bat脚本,通过命令实现了一个多版本JDK切换的小工具。
多版本JDK管理工具也有开源的JENV、SDKMAN等。但还是感觉自己写的顺手一点并且功能也没有冗余,还可以学习Python知识。
思路分析:
- 通过Python中的subprocess,调用bat命令中的setx命令来修改系统的环境变量。
- 通过引入配置文件的方式,实现JDK版本路径的统一管理。
- 通过命令来具体切换相应的JDK版本。
核心代码
import subprocess
def switch_jdk():
print("Command List")
print("switch [version] --切换jdk")
print("jdk list --jdk列表")
print("exit")
while True:
subprocess.call("cls", shell=True)
command = input("请输入指令:")
version = command.split()[1]
#解析用户输入的指令,获得将要切换的版本号
if command==f"switch {version}":
jdk_path = getJdkPath(version)
subprocess.run(['setx', 'JAVA_HOME', jdk_path, '/M'], shell=True, check=True)
print(f"切换JDK_{version}成功!")
input("按任意键继续...")
elif command == "jdk list":
obtainJdkList()
elif command == "exit":
break
else:
print("无效的选项,请重新选择!")
input("按任意键继续...")
continue
#读取配置文件
def readFileContent():
# 读取jdk配置路径
try:
# 读取jdk配置路径
with open("jdk.conf", 'r', encoding="UTF-8") as file:
content = file.read()
return content
except FileNotFoundError:
print("文件不存在")
except IOError:
print("文件读取错误")
#获取jdk列表
def obtainJdkList():
content=readFileContent()
lines = content.split("\n")
for line in lines:
if "=" in line:
key = line.split("=")[0]
print(key)
def getJdkPath(version):
try:
content=readFileContent()
# 分割文件内容为每一行,并遍历查找指定版本的路径
lines = content.split("\n")
for line in lines:
if "=" in line:
key, value = line.split("=")
if key == f"JDK_{version}":
return value
except FileNotFoundError:
print("文件不存在")
return None
except IOError:
print("文件读取错误")
return None
switch_jdk()
JDK配置文件:用于存放当前电脑中已经安装的JDK路径。格式JDK_版本号=路径
1.下载本文压缩包。
2.解压完成后,进入到Daen-JDKMAN文件夹,找到jdk.conf文件。将本地电脑中的JDK安装目录配置到配置jdk.conf文件中。
JDK_{version}=你的安装路径
3.操作命令现在有两个,如下:
switch 1.8.131
切换至目标JDK。4.另外需要注意:如果提示错误,需要以管理员身份运行Pycharm或者Daen-JDKMAN.exe
。
有关于Python实现JDK多版本切换管理工具到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。
最后,创作不易,请尊重原创!!!