手动切换(最基础,无需额外工具)
这种方法通过直接修改环境变量来实现,适用于任何 Linux 发行版。
查找已安装的 Java 版本
你需要确认你的系统上已经安装了哪些 Java 版本,Java 安装程序会将可执行文件放在 /usr/bin/ 目录下,并创建符号链接。
使用 update-java-alternatives 命令(在 Debian/Ubuntu 系统上):
# 列出所有已安装的 Java 版本 sudo update-java-alternatives --list
或者,使用 ls 命令查看 /usr/lib/jvm/ 目录(Java 通常安装在这里):
ls /usr/lib/jvm/
或者,使用 ls 查看 /usr/bin/ 下的 Java 相关命令:
ls /usr/bin/java*
临时切换(仅对当前终端会话有效)
如果你只是想在当前打开的终端窗口中临时使用某个 Java 版本,可以直接修改 PATH 环境变量。
假设你有一个 Java 17 的安装路径是 /usr/lib/jvm/java-17-openjdk-amd64/bin,可以这样操作:
# 将 Java 17 的 bin 目录添加到 PATH 的最前面 export PATH="/usr/lib/jvm/java-17-openjdk-amd64/bin:$PATH" # 验证当前使用的 Java 版本 java -version javac -version
注意:这种方法只在当前终端会话中有效,关闭终端或打开一个新的终端,设置就会失效。
永久切换(推荐,对所有用户和会话生效)
要永久切换 Java 版本,你需要修改系统的环境变量文件,通常是 /etc/environment 或 /etc/profile。
步骤 A:找到 Java 安装路径
你需要知道你要切换到的 Java 版本的完整路径,可以使用 update-java-alternatives --list 的输出来帮助判断。
列表显示:
java-1.11.0-openjdk-amd64 1111 /usr/lib/jvm/java-1.11.0-openjdk-amd64
java-1.17.0-openjdk-amdbox 1711 /usr/lib/jvm/java-1.17.0-openjdk-amd64
这里的第三列就是路径。
步骤 B:修改环境变量文件
方法 1:修改 /etc/environment (推荐)
这个文件为所有用户和所有进程设置环境变量。
-
用
sudo和你喜欢的编辑器(如nano或vim)打开文件:sudo nano /etc/environment
-
找到
PATH变量,然后将你想要使用的 Java 版本的bin目录添加到PATH的最前面。注意保留原有的其他路径。修改前:
PATH="/usr/local/bin:/usr/bin:/bin"修改后 (假设切换到 Java 17):
PATH="/usr/lib/jvm/java-1.17.0-openjdk-amd64/bin:/usr/local/bin:/usr/bin:/bin" -
保存文件并退出。
-
重新登录或重启系统,让修改生效,或者,你可以运行
source /etc/environment来使其在当前会话中生效,但这可能不会对所有程序都有效。
方法 2:修改 /etc/profile 或 /etc/profile.d/java.sh
这种方法更灵活,可以为特定用户或所有用户设置。
-
创建一个新的配置文件,
/etc/profile.d/java.sh:sudo nano /etc/profile.d/java.sh
-
在文件中添加以下内容,将
JAVA_HOME和PATH指向你的新 Java 版本:#!/bin/sh export JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH
-
保存文件并退出。
-
让文件可执行:
sudo chmod +x /etc/profile.d/java.sh
-
重新登录或运行
source /etc/profile来加载配置。
验证永久切换
# 打开一个新的终端窗口 java -version javac -version echo $JAVA_HOME
如果输出是你设置的版本,则说明切换成功。
使用专用工具(推荐,更简单)
手动修改环境变量容易出错,而且如果安装了多个版本,管理起来很麻烦,强烈建议使用以下工具来管理 Java 版本。
update-java-alternatives (Debian / Ubuntu / Mint)
这是 Debian/Ubuntu 系统上管理 Java 替代项的官方工具。
安装: 如果你的系统没有这个工具(虽然通常都有),可以安装:
sudo apt update sudo apt install install-info
使用:
-
列出所有版本:
sudo update-java-alternatives --list
-
切换到指定版本: 假设你想切换到
java-1.17.0-openjdk-amd64。# --jre 表示切换 Java 运行时环境 # --set 指定要设置的版本名称 sudo update-java-alternatives --set java-1.17.0-openjdk-amd64
-
验证:
java -version
这个工具会自动更新 /usr/bin/java、javac 等命令的符号链接,并设置好 JAVA_HOME,非常方便。
archlinux-java (Arch Linux)
Arch Linux 使用自己的工具。
-
列出所有版本:
sudo archlinux-java status
-
切换到指定版本:
sudo archlinux-java set java-17-openjdk
sdkman! (跨平台,强烈推荐)
sdkman! 是一个命令行工具,用于管理多个软件开发工具包(包括 Java、Kotlin、Gradle、Maven 等),它非常强大、易用,是管理 Java 版本的“瑞士军刀”。
安装: 打开终端,运行以下命令:
curl -s "https://get.sdkman.io" | bash
安装完成后,打开一个新的终端,让它自动加载。
使用:
-
安装多个 Java 版本:
# 安装 OpenJDK 17 sdk install java 17.0.12-tem # 安装 OpenJDK 11 sdk install java 11.0.21-tem # 安装 Oracle JDK 21 (需要接受许可协议) sdk install java 21.0.2-tem
-
列出已安装的 Java 版本:
sdk list java
-
切换 Java 版本:
# 切换到 Java 17 sdk use java 17.0.12-tem # 切换到 Java 11 sdk use java 11.0.21-tem
-
设置默认版本:
sdk default java 17.0.12-tem
sdkman! 的优点是它会自动处理 JAVA_HOME 和 PATH,无需你手动干预,而且支持在多个版本间无缝切换。
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 手动切换 | 无需额外工具,理解底层原理 | 容易出错,管理多个版本麻烦,需要手动处理 JAVA_HOME |
只有一两个 Java 版本,且不常切换的系统。 |
系统工具 (update-java-alternatives) |
官方支持,稳定可靠,自动处理符号链接 | 仅限特定发行版 | Debian/Ubuntu 用户,是官方推荐的方式。 |
跨平台工具 (sdkman!) |
功能最强大,易于安装和管理,支持多版本,自动处理所有环境变量 | 需要先安装 sdkman! 本身 |
强烈推荐给所有用户,尤其是需要频繁切换 Java 版本的开发者。 |
给你的建议:
- 如果你只是偶尔需要切换版本,并且使用的是 Ubuntu/Debian,直接使用
sudo update-java-alternatives --set <version>是最简单直接的方法。 - 如果你是一名开发者,需要在不同项目(如 Java 8, 11, 17, 21)之间频繁切换,或者你使用的是其他发行版(如 CentOS, Fedora, Arch),强烈建议安装
sdkman!,它会彻底简化你的 Java 版本管理工作。
