序言
JDK目前更新速度超级快,每年3月及9月都会发布一个版本,目前JDK19已经发布。如果想在一个环境体验不同JDK的功能差异,并且方便地切换,可以参考这篇文章
命令行切换
如果每次切换版本时,都手动修改环境变量(~/.bash_profile或~/.zshrc),然后执行source命令让修改生效,还是比较麻烦的
可以考虑用alias命令,配置快捷方式。具体实现如下,在~/.bash_profile文件中增加如下配置
### JDK definition
JAVA_08=$(/usr/libexec/java_home -v 1.8)
JAVA_11=$(/usr/libexec/java_home -v 11)
JAVA_17=$(/usr/libexec/java_home -v 17)
JAVA_19=$(/usr/libexec/java_home -v 19)### alias
alias java8='echo "export JAVA_HOME=$JAVA_08" >> ~/.bash_profile && source ~/.bash_profile && echo "switch to Java8"'
alias java11='echo "export JAVA_HOME=$JAVA_11" >> ~/.bash_profile && source ~/.bash_profile && echo "switch to Java11"'
alias java17='echo "export JAVA_HOME=$JAVA_17" >> ~/.bash_profile && source ~/.bash_profile && echo "switch to Java17"'
alias java19='echo "export JAVA_HOME=$JAVA_19" >> ~/.bash_profile && source ~/.bash_profile && echo "switch to Java19"'
配置完成后,执行source ~/.bash_profile
如果要切换到JDK17,直接在命令行中输入别名java17即可
用alias可以查看当前已有的别名列表
上述配置文件中用到了/usr/libexec/java_home,在Mac OSX 10.5之后,在 /usr/libexec/
路径下新增乐一个java_home文件,这是Mac系统用于管理JAVA_HOME的工具
目前切换JDK版本是全局生效的,打开新的Terminal也可以取到最新的JAVA_HOME,多切换了几次,发现~/.bash_profile文件末尾几行全是JAVA_HOME,最后一个生效,不影响功能。但还是优化一下吧,考虑用sed命令删除最后几行,再加入最新的值
优化后的配置如下
### JDK definition
JAVA_08=$(/usr/libexec/java_home -v 1.8)
JAVA_11=$(/usr/libexec/java_home -v 11)
JAVA_17=$(/usr/libexec/java_home -v 17)
JAVA_19=$(/usr/libexec/java_home -v 19)
THE_F=~/.bash_profile### alias
alias java8='sed -i "" "/export JAVA_HOME=\//d" $THE_F && echo "export JAVA_HOME=$JAVA_08" >> $THE_F && source $THE_F && echo "switch to Java8"'
alias java11='sed -i "" "/export JAVA_HOME=\//d" $THE_F && echo "export JAVA_HOME=$JAVA_11" >> $THE_F && source $THE_F && echo "switch to Java11"'
alias java17='sed -i "" "/export JAVA_HOME=\//d" $THE_F && echo "export JAVA_HOME=$JAVA_17" >> $THE_F && source $THE_F && echo "switch to Java17"'
alias java19='sed -i "" "/export JAVA_HOME=\//d" $THE_F && echo "export JAVA_HOME=$JAVA_19" >> $THE_F && source $THE_F && echo "switch to Java19"'
再次切换几次后,发现一切正常,完美解决
参考文档
unalias命令详解
Mac sed命令invalid command code错误