在Java中如何安装并配置JDK多版本

来源:站长论坛作者:唐僧头衔:草根站长
导读:本期聚焦于唐僧创作的《在Java中如何安装并配置JDK多版本》,敬请观看详情。很多开发场景需要同时维护多个Java项目,不同项目可能依赖不同版本的JDK,这时候就需要掌握JDK多版本的安装和配置方法。本文会详细介绍Windows和Linux系统下JDK多版本的完整安装流程,讲解环境变量配置的核心逻辑,还会分享多版本快速切换的实用技巧,帮助开发者解决多版本环境冲突问题,提升开发环境的管理效率,让不同Java项目的运行和调试更加顺畅。

在Java中如何安装并配置JDK多版本

Java中如何安装并配置JDK多版本

为什么需要管理多个JDK版本

在日常Java开发中,不同项目往往对JDK版本有不同要求。老项目可能基于JDK 8开发,使用了大量过时的API,迁移成本高;而新项目则希望享受JDK 17带来的新特性,比如密封类、模式匹配、Record等。如果只安装一个JDK版本,每次切换项目都要卸载重装,不仅浪费时间,还容易因为残留配置导致环境混乱。

更常见的场景是:你同时维护一个公司内部的遗留系统和参与一个新的微服务项目。遗留系统只能用JDK 8编译,否则会出现兼容性问题;新项目团队统一要求JDK 17。这时,在一台电脑上安装多个JDK版本,并能随时切换,就成了必备技能。

除了项目需求,学习也需要多版本。比如你想对比JDK 8和JDK 11在垃圾回收方面的差异,或者测试你的代码在新版本下是否还能正常运行。掌握多版本管理,可以让你在不同环境间自如切换,避免反复安装卸载的麻烦。

一、Windows系统下JDK多版本安装配置

1.1 下载并安装多个JDK版本

首先,你需要从Oracle官网或OpenJDK官方站点下载所需版本的JDK安装包。以JDK 8和JDK 17为例,分别下载对应Windows x64的安装程序。

运行安装程序时,最关键的一点是选择不同的安装目录。千万不要接受默认路径,因为默认路径通常只包含版本号的一部分,容易混淆。建议统一放在一个专门的文件夹下,比如 `C:\Java`。你可以这样规划:

  • JDK 8 安装到C:\Java\jdk1.8.0_301
  • JDK 17 安装到C:\Java\jdk-17.0.1

为什么要分开目录?因为每个JDK版本包含自己的bin目录、lib目录、include目录等,如果安装在同一目录,后面的版本会覆盖前面的文件,导致两个版本都无法正常使用。分开存放后,每个版本都是独立的,互不影响。

安装过程中,有些安装程序会提示是否安装公共JRE。对于JDK 8及以前版本,可以选择安装;JDK 11以后,JRE已经整合到JDK中,不再单独提供。无论如何,你只需要确保JDK本身的安装成功即可。

1.2 配置多版本环境变量

Windows的环境变量配置是多版本管理的核心。思路是:为每个JDK版本定义一个独立的环境变量,再用一个主变量JAVA_HOME指向当前要使用的版本,最后将%JAVA_HOME%\bin添加到系统Path中。

第一步:新建版本专用变量

打开系统属性 → 高级 → 环境变量,在“系统变量”区域点击“新建”,创建以下两个变量:

  • 变量名:JAVA8_HOME,变量值:C:\Java\jdk1.8.0_301
  • 变量名:JAVA17_HOME,变量值:C:\Java\jdk-17.0.1

第二步:创建或修改 JAVA_HOME

接着,新建或编辑系统变量JAVA_HOME,将其值设置为%JAVA8_HOME%%JAVA17_HOME%。例如,如果你想默认使用JDK 8,就填%JAVA8_HOME%。这里的百分号表示引用其他变量的值,是一种间接引用的技巧,方便后续切换。

第三步:更新 Path 变量

在系统变量中找到Path,双击编辑。点击“新建”,添加%JAVA_HOME%\bin。注意,一定要删除之前可能存在的其他JDK路径,比如C:\Program Files\Java\jdk-17\bin这样的绝对路径。因为如果有多个bin目录在Path中,系统会按照顺序找到第一个可执行的java.exe,可能导致版本混乱。只保留%JAVA_HOME%\bin这一条动态路径,这样切换JAVA_HOME时,Path自动跟随变化。

1.3 验证配置是否生效

配置完成后,需要重新打开一个命令提示符窗口(Win+R → cmd)。输入以下命令:

java -version

如果显示的是JDK 8的版本信息,说明当前使用的是JDK 8。如果想切换到JDK 17,只需回到环境变量设置,将JAVA_HOME的值改为%JAVA17_HOME%,然后保存。再次打开新的命令提示符,输入java -version,就会看到JDK 17的信息。

注意:已经打开的命令提示符窗口不会感知环境变量变化,必须关闭后重新打开。这是因为环境变量在进程启动时被读取并缓存,后续修改不会影响已运行的进程。

1.4 切换版本的小技巧

每次手动修改环境变量比较麻烦,你可以创建一个批处理文件(.bat)来实现一键切换。例如,创建switch_to_jdk8.bat,内容如下:

@echo off
setx JAVA_HOME "%JAVA8_HOME%" /M
echo Switched to JDK 8. Please restart command prompt.

同理创建switch_to_jdk17.bat。以管理员身份运行这些批处理文件,就能快速修改系统变量。不过修改后仍需要重启命令提示符才能生效。

二、Linux系统下JDK多版本安装配置

2.1 解压安装多个JDK版本

Linux环境下,通常使用tar.gz压缩包进行安装。首先将下载好的JDK压缩包上传到服务器,建议统一存放在/usr/local/java目录下。执行以下命令解压:

# 创建目标目录
sudo mkdir -p /usr/local/java

# 解压JDK 8
sudo tar -zxvf jdk-8u301-linux-x64.tar.gz -C /usr/local/java/

# 解压JDK 17
sudo tar -zxvf jdk-17.0.1_linux-x64_bin.tar.gz -C /usr/local/java/

解压后,你会得到两个目录:/usr/local/java/jdk1.8.0_301/usr/local/java/jdk-17.0.1。这两个目录各自包含了完整的JDK文件。

2.2 使用 alternatives 命令管理多版本

Linux提供了一个非常方便的工具叫alternatives(在CentOS/RHEL上可用,Ubuntu上对应的是update-alternatives),它可以管理系统中的多个同类型软件版本,比如多个JDK、多个Python等。

注册JDK 8

sudo alternatives --install /usr/bin/java java /usr/local/java/jdk1.8.0_301/bin/java 1
sudo alternatives --install /usr/bin/javac javac /usr/local/java/jdk1.8.0_301/bin/javac 1

注册JDK 17

sudo alternatives --install /usr/bin/java java /usr/local/java/jdk-17.0.1/bin/java 2
sudo alternatives --install /usr/bin/javac javac /usr/local/java/jdk-17.0.1/bin/javac 2

命令末尾的数字是优先级,数字越大优先级越高。这里JDK 17的优先级设为2,所以如果不手动选择,系统默认会使用JDK 17。你也可以根据需要调整优先级。

为什么要分别注册javajavac?因为它们是两个不同的命令,都需要指向正确的版本。此外,还可以注册jarjlink等其他常用工具,但通常javajavac就够用了。

2.3 切换并验证版本

执行以下命令来手动选择当前使用的JDK版本:

sudo alternatives --config java

系统会列出所有已注册的java版本,并提示输入序号。例如:

There are 2 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*  1           /usr/local/java/jdk1.8.0_301/bin/java
 + 2           /usr/local/java/jdk-17.0.1/bin/java

Enter to keep the current selection[+], or type selection number:

输入对应的数字(比如1),然后按回车。同样地,也需要对javac执行一次切换:

sudo alternatives --config javac

切换完成后,验证版本:

java -version
javac -version

如果输出与你选择的版本一致,说明配置成功。

2.4 通过环境变量方式管理(备选方案)

如果你不喜欢使用alternatives,也可以像Windows一样通过环境变量来控制。编辑/etc/profile~/.bashrc,添加如下内容:

export JAVA8_HOME=/usr/local/java/jdk1.8.0_301
export JAVA17_HOME=/usr/local/java/jdk-17.0.1
export JAVA_HOME=$JAVA8_HOME
export PATH=$JAVA_HOME/bin:$PATH

需要切换时,修改JAVA_HOME的赋值,然后执行source /etc/profile使配置生效。但这种方式不如alternatives优雅,因为alternatives是系统级的管理工具,对所有用户生效,且切换命令更直观。

三、多版本管理的进阶技巧

3.1 在IDE中指定JDK版本

很多时候,你并不需要全局切换JDK版本,而是希望某个项目使用特定版本。现代IDE(如IntelliJ IDEA、Eclipse)都支持为每个项目单独配置JDK。

在IntelliJ IDEA中,进入 File → Project Structure → SDKs,可以添加多个JDK路径。然后在每个模块的 Project Settings 中选择对应的SDK。这样,你可以在同一个IDE窗口中同时打开JDK 8和JDK 17的项目,互不干扰。

3.2 使用构建工具指定JDK

如果你使用Maven或Gradle,可以在项目配置中指定编译级别,而不需要关心全局JDK版本。例如,在Maven的pom.xml中:

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

这样即使全局JAVA_HOME指向JDK 17,Maven也会强制使用JDK 8的语法进行编译(前提是你安装了JDK 8并且Maven能找到它)。但要注意,如果全局JDK版本太低,而项目要求高版本,编译会失败。所以稳妥的做法是让全局JDK版本不低于项目中要求的最高版本,然后用构建工具限制编译级别。

3.3 使用版本管理工具(如 SDKMAN)

对于Linux和macOS用户,还有一个更强大的工具叫 SDKMAN。它可以管理多个JDK版本、Maven、Gradle、Spring Boot CLI等。安装SDKMAN后,只需一行命令就能安装任意JDK版本:

sdk install java 8.0.302-open
sdk install java 17.0.1-open

切换版本也极其简单:

sdk use java 8.0.302-open

SDKMAN会自动管理环境变量,无需手动配置。它是目前最推荐的Java多版本管理方案,尤其适合频繁切换的开发场景。

四、常见问题与解决方案

4.1 版本切换后不生效

Windows:修改环境变量后,必须重新打开命令提示符窗口。如果仍然不生效,检查Path中是否还有其他JDK路径排在前面。可以在命令提示符中执行where java,查看系统找到的第一个java.exe位于哪里。如果指向了错误的位置,说明Path中存在其他JDK路径未被清除。

Linux:使用alternatives切换后,如果新终端中版本未变,可能是因为shell缓存。执行hash -r清除缓存,或者重新登录终端。另外,检查是否在.bashrc中手动设置了JAVA_HOME,这可能会覆盖alternatives的设置。

4.2 项目无法编译,报错“不支持发行版本”

这通常是因为Maven或Gradle配置的编译级别与当前使用的JDK版本不匹配。例如,项目配置了<maven.compiler.source>17</maven.compiler.source>,但全局JDK却是8。解决方法:要么升级全局JDK,要么降低项目配置。建议保持全局JDK为较新版本,然后在项目中通过配置向下兼容。

4.3 多个JDK版本导致环境变量混乱

有些开发者喜欢在Path中添加多个JDK的bin路径,比如同时包含C:\Java\jdk1.8.0_301\binC:\Java\jdk-17.0.1\bin。这样做会导致系统使用最先找到的那个版本,而你很难控制到底是哪一个。强烈建议只保留%JAVA_HOME%\bin这一条动态路径,并通过修改JAVA_HOME来切换。

五、总结

安装并配置多个JDK版本是Java开发者的基本功。Windows下通过环境变量间接引用实现灵活切换,Linux下使用alternatives工具更为标准。无论哪种方式,核心原则都是:每个版本独立安装,通过一个统一的入口(JAVA_HOME或alternatives)来控制当前激活的版本。

掌握了这些方法,你就可以在同一台机器上同时维护多个Java项目,而不用担心环境冲突。如果再配合IDE的项目级SDK配置和构建工具的编译级别设置,你的开发效率将大幅提升。现在就去试试吧,让你的开发环境从此告别混乱。

JavaJDK多版本配置环境变量修改时间:2026-08-23 02:51:50

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。