Bootstrap

Linux中Centos7中安装三版本jdk(jdk1.8、jdk17、jdk21)【全网最细!!!】

# Linux多版本JDK管理指南

## 📦 前置准备
1. **清理旧版本**  
   ```bash
   # 停止所有Java进程
   sudo pkill -9 java
   # 删除旧安装(按需执行)
   sudo rm -rf /usr/local/jdk*
  1. 创建统一管理目录
    sudo mkdir -p /usr/lib/jvm
    

⚙️ 安装JDK

1.8/17/21版本通用安装流程

必操作步骤

# 解压JDK到指定目录(示例JDK21)
sudo tar -zxvf jdk-21_linux-x64_bin.tar.gz -C /usr/local/
sudo mv /usr/local/jdk-21.0.1 /usr/local/jdk21

# 重复操作安装其他版本

🔗 配置alternatives系统

注册JDK到管理系统

必操作步骤

# 注册JDK21(优先级最高)
sudo alternatives --install /usr/lib/jvm/default-java java_sdk /usr/local/jdk21 100 \
  --slave /usr/bin/java java /usr/local/jdk21/bin/java \
  --slave /usr/bin/javac javac /usr/local/jdk21/bin/javac \
  --slave /usr/bin/jar jar /usr/local/jdk21/bin/jar

# 注册JDK17(优先级次之)
sudo alternatives --install /usr/lib/jvm/default-java java_sdk /usr/local/jdk17 80 \
  --slave /usr/bin/java java /usr/local/jdk17/bin/java \
  --slave /usr/bin/javac javac /usr/local/jdk17/bin/javac \
  --slave /usr/bin/jar jar /usr/local/jdk17/bin/jar

# 注册JDK1.8(优先级最低)
sudo alternatives --install /usr/lib/jvm/default-java java_sdk /usr/local/jdk1.8 60 \
  --slave /usr/bin/java java /usr/local/jdk1.8/bin/java \
  --slave /usr/bin/javac javac /usr/local/jdk1.8/bin/javac \
  --slave /usr/bin/jar jar /usr/local/jdk1.8/bin/jar

设置自动切换

sudo alternatives --auto java_sdk

🌐 环境变量配置

必操作步骤

sudo tee /etc/profile.d/java.sh <<'EOF'
export JAVA_HOME=/usr/lib/jvm/default-java
export PATH=$JAVA_HOME/bin:$PATH
EOF

# 立即生效
source /etc/profile.d/java.sh

✅ 验证配置

# 验证版本
java -version
# 应输出当前选择的JDK版本

# 检查符号链接
ls -l /usr/bin/java
# 正确示例:/usr/bin/java -> /etc/alternatives/java

# 查看alternatives配置
alternatives --display java_sdk

🚨 常见问题排查

❗ 问题1:切换版本后仍显示旧版本

解决方案

  1. 强制刷新环境
    hash -r && source /etc/profile
    
  2. 检查路径覆盖
    # 查看PATH中是否有其他Java路径
    echo $PATH | tr ':' '\n' | grep java
    

❗ 问题2:alternatives配置异常

错误现象
alternatives: error: alternative path /path/to/java doesn't exist

解决方案

# 删除无效注册项
sudo alternatives --remove java_sdk /invalid/path

# 重新注册正确路径
sudo alternatives --install [正确参数]

❗ 问题3:权限不足

错误现象
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system

解决方案

# 递归修改目录权限
sudo chown -R root:root /usr/lib/jvm
sudo chmod -R 755 /usr/lib/jvm

📂 目录结构参考

/usr/lib/jvm/
├── default-java -> /usr/local/jdk21  # 动态符号链接
├── jdk1.8
├── jdk17
└── jdk21

🛠️ 高级管理技巧

快速切换脚本

sudo tee /usr/local/bin/jdkswitch <<'EOF'
#!/bin/bash
sudo alternatives --set java_sdk "/usr/local/jdk${1}/"
source /etc/profile
EOF

sudo chmod +x /usr/local/bin/jdkswitch

# 使用示例
jdkswitch 21  # 切换到JDK21

查看所有Java路径

sudo update-alternatives --list java_sdk

📌 通过本指南,您可以实现:

  • 多版本JDK的无缝切换
  • 环境变量自动同步
  • 优先级智能管理
    遇到问题时,请优先检查符号链接和环境变量配置!
;