linux系统学习笔记——配置JDK6/8/21并实现切换

配置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 替换命令,用于查找并删除匹配的文本。
    • ssed 的替换命令(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版本列出来,用户可以直接选择,而不是手动输入命令呢?但是下次再说吧~目前只有我在用,哈哈哈哈

  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值