目 录CONTENT

文章目录

Linux系统切换多JDK版本

陌念
2025-09-10 / 0 评论 / 0 点赞 / 10 阅读 / 0 字
温馨提示:
本文最后更新于2025-09-10,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Java开发过程中,经常需要在不同项目间切换不同版本的JDK。Linux系统提供了多种方式来管理多个JDK版本,本文将介绍几种常用的方法。

1. 使用 update-alternatives 工具

update-alternatives是Linux系统中管理软件替代品的工具,适用于Debian/Ubuntu/RedHat等系统。

安装JDK

使用包管理工具安装的JDK会自动注册到系统

# 安装OpenJDK 8
sudo apt install openjdk-8-jdk

# 安装OpenJDK 11
sudo apt install openjdk-11-jdk

# 安装OpenJDK 17
sudo apt install openjdk-17-jdk

如果是手动安装的JDK,则需要手动注册到系统(如果上述未自动注册到系统的,也可以手动注册下

# 以手动安装的JDK 17为例,路径为/usr/local/jdk-17.0.9
sudo update-alternatives --install /usr/bin/java java /usr/local/jdk-17.0.9/bin/java 100

sudo update-alternatives --install /usr/bin/javac javac /usr/local/jdk-17.0.9/bin/javac 100
# 数值100是优先级(越高越优先被默认选择)

卸载JDK

  • 包管理器安装的 JDK:

# 卸载OpenJDK 17
sudo apt remove openjdk-17-jdk
  • 手动安装的 JDK:

  1. 删除解压目录

  2. 移除update-alternatives注册:

sudo update-alternatives --remove java /usr/local/jdk-17.0.9/bin/java

sudo update-alternatives --remove javac /usr/local/jdk-17.0.9/bin/javac

配置alternatives

# 设置默认JDK
sudo update-alternatives --config java
# 设置默认 javac
sudo update-alternatives --config javac

执行后会列出所有已注册的版本,输入序号即可切换。

其中 Status 为 auto mode(默认把注册时优先级最高的设置为这个) 或 manual mode(其他的则设置为这个)

2. 手动配置环境变量

部分工具或应用需要通过JAVA_HOME环境变量定位 JDK 路径,这种方法适用于需要精确控制JDK版本的情况。

设置JAVA_HOME

# 编辑~/.bashrc或~/.profile文件
vim ~/.bashrc

# 添加以下内容
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

# 使配置生效
source ~/.bashrc

创建切换脚本

# 创建jdk切换脚本
vim jdk_switch.sh

#!/bin/bash
case $1 in
  8)
    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    ;;
  11)
    export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
    ;;
  17)
    export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
    ;;
  *)
    echo "Usage: $0 {8|11|17}"
    exit 1
    ;;
esac
export PATH=$JAVA_HOME/bin:$PATH
echo "JAVA_HOME set to $JAVA_HOME"
# 赋予执行权限
chmod +x jdk_switch.sh

# 使用脚本切换JDK
./jdk_switch.sh 11  # 切换到JDK 11

3. 使用JEnv工具

JEnv是一个专门用于管理多个JDK版本的轻量级工具。

安装JEnv

# 克隆JEnv仓库
git clone https://github.com/jenv/jenv.git ~/.jenv

# 添加到环境变量(根据使用的shell选择对应配置文件) 
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(jenv init -)"' >> ~/.bashrc

# Zsh用户
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc

# 使配置生效
source ~/.bashrc

验证安装

jenv --version  # 输出版本号即安装成功

添加JDK到JEnv

jenv 本身不安装 JDK,需先手动安装所需版本的 JDK(通过包管理器或手动解压),再将其路径添加到 jenv 中。

# 添加本地已安装的JDK(包管理器安装的 OpenJDK:通常在 /usr/lib/jvm/ 目录下)
jenv add /usr/lib/jvm/java-8-openjdk-amd64
jenv add /usr/lib/jvm/java-11-openjdk-amd64
jenv add /usr/lib/jvm/java-17-openjdk-amd64

# 查看已添加的JDK版本(带*的是当前激活版本)
jenv versions

切换JDK版本

jenv 支持三种级别的版本切换(优先级:局部 > shell > 全局):

1. 全局默认版本(系统级,默认生效)

bash

jenv global 11.0  # 设置全局默认版本为11.x(版本号可简写,如11.0、17.0)

2. 当前 shell 会话临时版本

bash

jenv shell 17.0  # 仅当前终端会话使用17.x版本,关闭终端后失效

3. 项目局部版本(仅当前目录及子目录生效)

在项目根目录执行:

jenv local 11.0  # 会生成一个.java-version文件记录当前项目的版本

进入该目录时,jenv 会自动切换到指定版本。

其他常用命令

# 查看当前激活的JDK版本
jenv version

# 移除已添加的JDK
jenv remove 17.0.9  # 版本号需完整(可通过jenv versions查看)

# 刷新jenv配置(添加新JDK后建议执行)
jenv rehash

# 配置JAVA_HOME环境变量(关键!很多工具依赖此变量)
jenv enable-plugin export  # 启用export插件,自动管理JAVA_HOME
source ~/.bashrc  # 重新加载配置后生效

注意事项

  1. 添加 JDK 时路径需指向 JDK 根目录(包含 bin、lib 等子目录的目录)。

  2. 切换版本后,javajavac 等命令会自动指向对应版本。

  3. 若使用 IDE(如 IntelliJ IDEA),需在 IDE 中手动指定项目使用的 JDK 版本(jenv 切换不影响 IDE 内部配置)。

4. 使用SDKMAN工具

SDKMAN!是一个软件开发工具管理器,支持管理JDK、Maven、Gradle等多种工具。

安装SDKMAN

# 安装SDKMAN!
curl -s "https://get.sdkman.io" | bash

# 重启终端或执行
source "$HOME/.sdkman/bin/sdkman-init.sh"

安装和管理JDK

# 查看可用的JDK版本
sdk list java

# 安装特定版本的JDK
sdk install java 8.0.322-zulu
sdk install java 11.0.15-zulu
sdk install java 17.0.3-zulu

# 查看已安装的JDK
sdk list java | grep installed

# 切换默认JDK
sdk default java 11.0.15-zulu

# 临时切换JDK
sdk use java 17.0.3-zulu

5. 使用Docker容器

对于需要完全隔离的环境,可以使用Docker容器来运行不同版本的JDK。

拉取不同版本的OpenJDK镜像

# 拉取不同版本的JDK镜像
docker pull openjdk:8
docker pull openjdk:11
docker pull openjdk:17

运行容器

# 运行JDK 8容器
docker run -it --rm openjdk:8 bash

# 运行JDK 11容器
docker run -it --rm openjdk:11 bash

# 运行JDK 17容器
docker run -it --rm openjdk:17 bash

挂载代码运行

# 挂载当前目录并运行Java程序
docker run -it --rm -v $(pwd):/app -w /app openjdk:11 java -jar your-app.jar

总结

以上介绍了Linux系统切换多JDK版本的几种常用方法:

  1. update-alternatives:适用于Debian/Ubuntu/RedHat系统,系统级管理

  2. 手动配置环境变量:灵活但需要手动维护

  3. JEnv:轻量级专用工具,支持目录级别版本控制

  4. SDKMAN:功能全面的工具管理器,支持多种开发工具

  5. Docker容器:提供完全隔离的环境

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin
  3. QQ打赏

    qrcode qq

评论区