
一台电脑上安装多个Java版本怎么切换
在日常开发工作中,我们常常会遇到这样的困境:手上维护着一个老项目,它基于 Java 8 构建,而新启动的项目却要求使用 Java 17 甚至更高版本。如果每次都在系统里卸载重装,不仅浪费时间,还容易搞乱环境。更合理的做法是在同一台电脑上同时安装多个 Java 版本,并根据需要随时切换。本文将详细介绍在 Linux、macOS 和 Windows 三大主流操作系统上实现多 Java 版本切换的具体方法,帮助你轻松驾驭不同版本的 Java 环境。
为什么需要多 Java 版本切换
Java 语言发展至今已经经历了多个大版本迭代,每个版本都带来了新特性和改进。Java 8 引入了 Lambda 表达式和 Stream API,至今仍是许多企业级项目的首选;Java 11 成为长期支持版本,提供了模块化系统;Java 17 更是带来了密封类、模式匹配等现代语言特性。然而,很多遗留系统依然停留在 Java 8 上,因为迁移成本高、风险大。与此同时,新项目往往希望拥抱最新的技术栈。
在这种情况下,如果只能使用单一的 Java 版本,要么无法运行旧项目,要么无法体验新特性。多版本共存并灵活切换的方案应运而生。通过合理的管理工具或手动配置,我们可以让不同项目各自使用所需的 Java 版本,互不干扰。这不仅提高了开发效率,也降低了环境冲突的风险。
Linux 系统下的 Java 版本切换
Linux 系统(以 Ubuntu 为例)拥有强大的包管理机制和系统级版本管理工具update-alternatives。这个工具是系统自带的,无需额外安装,专门用于管理同一命令的多个版本,比如java、javac、python等。它的工作原理是通过符号链接将/usr/bin/java指向实际的可执行文件,切换时只需更改链接的目标。
安装多个 Java 版本
首先,我们需要通过包管理器安装不同版本的 OpenJDK。Ubuntu 的默认软件源通常包含多个 Java 版本,可以直接安装:
sudo apt update
sudo apt install openjdk-8-jdk # 安装 Java 8
sudo apt install openjdk-17-jdk # 安装 Java 17安装完成后,这些 JDK 会被放置在/usr/lib/jvm/目录下,每个版本都有独立的文件夹,例如java-8-openjdk-amd64和java-17-openjdk-amd64。此时系统默认使用的可能是最后安装的那个版本,但我们可以通过update-alternatives来自由切换。
注册 Java 版本到 alternatives 系统
为了让update-alternatives知道有哪些 Java 版本可用,我们需要手动将它们注册进去。注册时需要指定命令名称、可执行文件路径、优先级(数字越大优先级越高)。例如:
# 注册 Java 8
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-8-openjdk-amd64/bin/java 1
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-8-openjdk-amd64/bin/javac 1
# 注册 Java 17
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-17-openjdk-amd64/bin/java 2
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-17-openjdk-amd64/bin/javac 2这里我们将 Java 17 的优先级设为 2,Java 8 设为 1,因此默认情况下系统会使用 Java 17。当然,你也可以根据需要调整优先级数值。
切换 Java 版本
注册完成后,执行以下命令即可交互式地选择当前使用的 Java 版本:
sudo update-alternatives --config java
sudo update-alternatives --config javac执行后,终端会列出所有已注册的版本及其路径,并提示你输入编号来选择。选择后,/usr/bin/java和/usr/bin/javac这两个链接就会指向对应的可执行文件。此时再运行java -version,就能看到版本已经改变。
这种方式的优点是系统级生效,所有用户和终端都会受到影响。如果你只想在当前会话中临时切换,可以直接修改PATH环境变量,但不推荐,因为容易造成混乱。
macOS 系统下的 Java 版本切换
macOS 没有像 Linux 那样的update-alternatives工具,但我们可以借助第三方版本管理工具sdkman来实现。sdkman 是一个专门管理软件开发工具包(如 Java、Groovy、Scala、Kotlin 等)的命令行工具,它支持安装、切换、卸载多个版本,操作非常便捷。
安装 sdkman
打开终端,执行以下命令即可安装 sdkman:
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"安装完成后,你可以通过sdk version验证是否成功。sdkman 会将自身配置写入~/.bashrc或~/.zshrc,以后每次打开终端都会自动加载。
安装多个 Java 版本
sdkman 维护了一个庞大的 Java 版本库,包括 Oracle JDK、OpenJDK、GraalVM、Liberica JDK 等多种发行版。首先查看可用的 Java 版本列表:
sdk list java你会看到大量版本标识,例如8.0.372-tem(Temurin 发行的 Java 8)、17.0.7-tem(Temurin 发行的 Java 17)等。选择一个你需要的版本进行安装:
sdk install java 8.0.372-tem
sdk install java 17.0.7-temsdkman 会自动下载并解压到~/.sdkman/candidates/java目录下,并为每个版本建立独立文件夹。
切换 Java 版本
sdkman 提供了两种切换方式:临时切换和永久切换。
临时切换:只在当前终端窗口有效,关闭终端后恢复为默认版本。
sdk use java 8.0.372-tem永久切换:修改默认版本,对所有新打开的终端生效。
sdk default java 17.0.7-tem此外,你还可以通过sdk current java查看当前正在使用的版本。sdkman 还会自动管理JAVA_HOME环境变量,切换版本后无需手动修改。
值得一提的是,sdkman 不仅支持 Java,还支持 Maven、Gradle、Spring Boot 等众多工具的版本管理,可谓是一把瑞士军刀。
Windows 系统下的 Java 版本切换
Windows 系统没有原生的版本管理工具,但我们可以通过两种方式实现:一种是手动修改环境变量,另一种是使用第三方工具jabba。
手动修改环境变量
首先,你需要从官网或可信渠道下载不同版本的 JDK 安装包,并将其安装到不同的目录,例如:
- Java 8 安装到
C:\Java\jdk1.8.0_372 - Java 17 安装到
C:\Java\jdk-17.0.7
安装完成后,修改系统环境变量:
- 右键点击“此电脑” → “属性” → “高级系统设置” → “环境变量”。
- 在“系统变量”中找到
JAVA_HOME,将其值改为当前要使用的 JDK 路径,例如C:\Java\jdk1.8.0_372。 - 确保
Path变量中包含%JAVA_HOME%\bin。如果没有,手动添加。 - 点击“确定”保存所有设置。
之后打开一个新的命令提示符窗口,输入java -version即可看到版本已变更。注意:旧窗口的环境变量不会更新,必须新开窗口。
这种方法的缺点是不够灵活,每次切换都需要手动修改环境变量,并且容易忘记修改JAVA_HOME导致其他工具(如 Maven、Gradle)找不到正确的 JDK。因此,对于频繁切换的场景,推荐使用工具。
使用 jabba 工具
jabba 是一个专为 Java 版本管理设计的命令行工具,支持 Windows、macOS 和 Linux。它的用法与 sdkman 类似,但更轻量。
安装 jabba
在 Windows 上,你可以通过 PowerShell 或 Git Bash 运行以下命令安装:
curl -sL https://github.com/shyiko/jabba/raw/master/install.sh | bash安装完成后,按照提示将 jabba 添加到 PATH 中,然后重新打开终端。
安装和切换 Java 版本
# 安装 Java 8 和 Java 17
jabba install openjdk@1.8.0
jabba install openjdk@17
# 切换版本(当前终端生效)
jabba use openjdk@1.8.0
# 设置默认版本
jabba alias default openjdk@17jabba 会自动管理JAVA_HOME和PATH,切换后即时生效。它还支持从不同厂商(如 Amazon Corretto、AdoptOpenJDK、GraalVM)安装版本,只需修改标识即可。
通用注意事项与最佳实践
无论使用哪种操作系统和工具,都有一些通用的要点需要注意:
- 切换后务必打开新终端验证:环境变量的更改通常不会影响已经打开的终端窗口。因此,在修改完配置后,最好关闭所有旧终端,重新打开一个新窗口再执行
java -version确认。 - 项目级版本隔离:如果你使用 IDE(如 IntelliJ IDEA、Eclipse),可以在项目设置中单独指定使用的 JDK 路径,而不必修改全局环境变量。这样可以避免不同项目之间的冲突。
- 使用构建工具管理:Maven 和 Gradle 都支持通过配置指定 JDK 版本。例如,在 Maven 的
pom.xml中可以设置<java.version>,在 Gradle 的build.gradle中可以设置sourceCompatibility和targetCompatibility。但请注意,这只是在编译阶段约束字节码版本,运行时的 JDK 仍需与全局环境一致。 - 善用别名和默认版本:无论是 sdkman 还是 jabba,都支持设置默认版本。建议将日常开发中最常用的版本设为默认,偶尔需要切换时再用临时命令。
- 注意 32 位与 64 位架构:在 Windows 上,JDK 分为 x86 和 x64 版本,务必下载与操作系统匹配的版本,否则可能出现不兼容问题。
总之,多 Java 版本切换并不是一件复杂的事。Linux 用户可以直接利用系统自带的update-alternatives,macOS 和 Windows 用户推荐使用 sdkman 或 jabba 这类专用工具,它们能大大降低管理成本。掌握这些技巧后,你就可以在同一台电脑上从容应对各种 Java 版本的需求了。
Java多版本管理sdkmanupdate_alternatives环境变量修改时间:2026-08-23 02:50:25