配置JDK8
第一步更新
sudo apt update
sudo apt upgrade
突然发现无论干啥的教程,大部分首步操作都是这个,原因:确保系统软件包管理器始终拥有最新的信息,避免安装过时的软件包,确保系统的一致性和安全性。
直接使用命令安装jdk8(系统管理器内已有这个包所以可以直接安装啦)
sudo apt install openjdk-8-jdk
打开bashrc配置文件
nano ~/.bashrc
在末尾加上
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
(我一开始加成$PATH/bin:$JAVA_HOME 后搜索发现这样可能会导致系统首先执行其他版本的java或冲突的程序,当然我不是太理解,但还是注意把顺序改过来了)
保存更改后用source命令使更改生效
source ~/.bashrc
全部弄好以后
java -version javac -version echo $JAVA_HOME echo $PATH验证 输出都对~
配置完以后搜索发现除了更改bashrc 还有一种是更改/etc/profile.d/jdk.sh 搜索得知前者只针对当前用户的设置,后者是设置系统环境变量,针对所有用户,考虑到目前这是我的办公机,我就继续采用更改bashrc的方法啦
配置JDK21
jdk21需要自己下载,在oracle官网下载后把压缩包移到了usr/lib/jvm目录下,和jdk8的文件夹同级,cd命令转到该目录下以后,输入命令解压并安装
sudo dpkg -i jdk-21_linux-x64_bin.deb
安装成功后打开配置文件
nano ~/.bashrc
由于之前配置jdk8的时候已经配置了环境变量,现在不可以简单两句话再设置jdk21的环境变量,于是考虑如何切换jdk版本,并按照切换的版本配置环境变量
# 设置 JDK 路径
export JDK8_HOME=/usr/lib/jvm/jdk-8
export JDK21_HOME=/usr/lib/jvm/jdk-21
# 默认设置 JAVA_HOME 和 PATH
export JAVA_HOME=$JDK8_HOME
export PATH=$JAVA_HOME/bin:$PATH
# 定义切换 JDK 版本的函数
switch_java() {
if [ "$1" == "8" ]; then
export JAVA_HOME=$JDK8_HOME
elif [ "$1" == "21" ]; then
export JAVA_HOME=$JDK21_HOME
else
echo "Usage: switch_java {8|21}"
return 1
fi
export PATH=$JAVA_HOME/bin:$PATH
echo "Switched to JDK $1"
}
如上写了一个switch_java的方法, 简单的判断输入的是8还是21,用来切换jdk版本,但是在保存更改验证以后发现,这个方法在切换到jdk21以后,显示的路径虽然发生更改,但包含了之前的jdk8的路径,修改成下面的代码了,通过备份初始路径,替换中间包含jdk版本的部分
# 设置 JDK 路径
export JDK8_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JDK21_HOME=/usr/lib/jvm/jdk-21-oracle-x64
# 备份原始 PATH
export ORIGINAL_PATH=$(echo $PATH | sed -E 's#:/usr/lib/jvm/[a-zA-Z0-9-]+/bin##g')
# 默认设置 JAVA_HOME 和 PATH
export JAVA_HOME=$JDK8_HOME
export PATH=$JAVA_HOME/bin:$ORIGINAL_PATH
# 定义切换 JDK 版本的函数
switch_java() {
case $1 in
8)
export JAVA_HOME=$JDK8_HOME
;;
21)
export JAVA_HOME=$JDK21_HOME
;;
*)
echo "Usage: switch_java {8|21}"
return 1
;;
esac
export PATH=$JAVA_HOME/bin:$ORIGINAL_PATH
echo "Switched to JDK $1"
}
# Initial PATH setup
export PATH=$JAVA_HOME/bin:$ORIGINAL_PATH
export ORIGINAL_PATH=$(echo $PATH | sed -E 's#:/usr/lib/jvm/[a-zA-Z0-9-]+/bin##g')
对这行代码的解释:
|
:
- 管道符号
|
将前一个命令的输出作为下一个命令的输入。
sed -E 's#:/usr/lib/jvm/[a-zA-Z0-9-]+/bin##g'
:
sed
是一个流编辑器,用于对文本进行解析和转换。-E
选项启用扩展正则表达式(ERE),使得正则表达式的语法更加简洁和强大。's#:/usr/lib/jvm/[a-zA-Z0-9-]+/bin##g'
是一个sed
替换命令,用于查找并删除匹配的文本。
s
:sed
的替换命令(substitute)。#
:分隔符(仅为了区别于/才使用#):/usr/lib/jvm/[a-zA-Z0-9-]+/bin
:正则表达式,用于匹配PATH
中的 JDK 路径部分。##
:将匹配的部分替换为空(删除)。g
:全局替换标志,表示替换所有匹配项。
运行这个switch_java命令切换jdk后,环境都能配置好,但我又发现了一个问题,就是一旦关闭终端再打开,就会回到jdk8,不管上次有没有切换成jdk21,于是再次修改
# 设置 JDK 路径
export JDK8_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JDK21_HOME=/usr/lib/jvm/jdk-21-oracle-x64
# 备份原始 PATH
if [ -z "$ORIGINAL_PATH" ]; then
export ORIGINAL_PATH=$(echo $PATH | sed -E 's#:/usr/lib/jvm/[a-zA-Z0-9-]+/bin##g')
fi
# 定义切换 JDK 版本的函数
switch_java() {
if [ "$1" == "8" ]; then
export JAVA_HOME=$JDK8_HOME
elif [ "$1" == "21" ]; then
export JAVA_HOME=$JDK21_HOME
else
echo "Usage: switch_java {8|21}"
return 1
fi
# 清除旧的 JDK 路径并添加新的 JAVA_HOME
export PATH=$(echo $ORIGINAL_PATH | sed -E 's#:/usr/lib/jvm/[a-zA-Z0-9-]+/bin##g')
export PATH=$JAVA_HOME/bin:$PATH
echo "Switched to JDK $1"
# 保存当前 JDK 版本到配置文件
echo "JDK_VERSION=$1" > ~/.jdk_version
}
# 从配置文件读取上一次选择的 JDK 版本
if [ -f ~/.jdk_version ]; then
source ~/.jdk_version
switch_java $JDK_VERSION
else
# 默认设置为 JDK 8
export JAVA_HOME=$JDK8_HOME
export PATH=$JAVA_HOME/bin:$ORIGINAL_PATH
fi
这次问题都解决了,可以成功切换版本,可以配置环境,退出也不会重置。
配置JDK6
jdk6是在网上搜索下载的.bin文件,同样也是放到/usr/lib/jvm文件下
先添加权限
sudo chmod +x jdk-6u45-linux-x64.bin
安装
sudo ./jdk-6u45-linux-x64.bin
依旧是打开bashrc文件,此时只需要在前面写的方法里适当位置加上jdk6的切换就好啦。
不能忘记每一次修改过bashrc,都要
source ~/.bashrc
最后展示一下切换的效果
写到这里突然想到,这个switch_java方法,由于是我配置的jdk,我知道有几个版本,知道输入什么版本存在什么不存在,如果是别的用户在操作我的电脑呢?或许应该写一个方法把所有jdk版本列出来,用户可以直接选择,而不是手动输入命令呢?但是下次再说吧~目前只有我在用,哈哈哈哈