基于 zsh 终端,以 jdk8 和 jdk11 为例
一. 网上的解决方案
安装 jdk8 和 jdk11
这个就不再赘述了,百度即可
配置文件写入环境变量
在 zshrc 中设置环境变量
vim ~/.zshrc
export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
export JAVA_17_HOME=$(/usr/libexec/java_home -v17)
export PATH=$PATH:$JAVA_HOME/bin
alias jdk8='export JAVA_HOME=$JAVA_8_HOME'
alias jdk11='export JAVA_HOME=$JAVA_11_HOME'
alias jdk17='export JAVA_HOME=$JAVA_17_HOME'
使用
在终端中输入 jdk8 即可切换为 8,输入 jdk11 即可切换为 11
二. 存在问题
只能在当前终端使用,重新打开终端后就会失效,因为每次重启终端后会自动执行 source ~/.zshrc,会把之前设置的覆盖掉
目前看来,要实现重启后也生效,只能在zshrc 中写死JAVA_HOME
三. 完美优化
可以写个脚本自动修改zshrc文件的内容,这里使用的是python,需要安装python3
-
python脚本如下 '''
Author: M?Haonan
Date: 2022-01-07 17:27:53
Description: 自动切换jdk版本,重启终端后也生效
原理:通过修改zshrc文件的内容,修改`JAVA_HOME`
'''
import sys,os
home_path = os.environ['HOME']
ZSH_CONFIG_FILE = home_path + '/.zshrc'
content = ''
with open(ZSH_CONFIG_FILE, "r") as f:
content = f.read()
if len(sys.argv) == 1:
exit("请传入jdk版本,例如1.8,11,17")
jdk = sys.argv[1]
jdk_home = '$(/usr/libexec/java_home -v' + jdk + ')'
exportCommond = "export JAVA_HOME=" + jdk_home;
lines = content.split("\n")
newLines = []
rewrite = False
for line in lines:
if line.startswith("export JAVA_HOME"):
line = exportCommond
rewrite = True
if line.startswith("export PATH=$PATH:$JAVA_HOME/bin"):
continue
newLines.append(line)
if not rewrite:
newLines.append(exportCommond)
newLines.append("export PATH=$PATH:$JAVA_HOME/bin")
with open(ZSH_CONFIG_FILE, "w") as f:
f.write('\n'.join(newLines))
-
修改zshrc 文件 export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8)
export JAVA_11_HOME=$(/usr/libexec/java_home -v11)
export JAVA_17_HOME=$(/usr/libexec/java_home -v17)
alias jdk8='python3 /Users/mahaonan/script/jdkChange.py 1.8;export JAVA_HOME=$JAVA_8_HOME'
alias jdk11='python3 /Users/mahaonan/script/jdkChange.py 11;export JAVA_HOME=$JAVA_11_HOME'
alias jdk17='python3 /Users/mahaonan/script/jdkChange.py 17;export JAVA_HOME=$JAVA_17_HOME'
其中前面的python3命令是为了全局的环境变量,即终端重启后可以生效 后面的export JAVA_HOME是为了当前终端可以生效 -
这样,在终端输入jdk8,jdk11,jdk17就可以进行全局和当前的jdk版本切换了
|