如何在一台电脑中安装多个JDK_Java多版本环境搭建方案

不能直接覆盖安装多个JDK,因会导致版本覆盖、java -version混乱及IDE/Maven读取错误;应通过SDKMAN!(Linux/macOS)或分目录+切换脚本(Windows)管理,并分别配置IDE、Maven、Gradle的JDK版本。

为什么不能直接覆盖安装多个 JDK

直接在同一个 JAVA_HOME 路径下反复安装不同版本的 JDK,会导致旧版本被覆盖、java -version 输出混乱、IDE 或构建工具(如 Maven)读取到错误的 JDK。Java 本身不提供内置的多版本切换机制,必须靠外部管理路径和环境变量。

推荐方案:用 SDKMAN! 管理多 JDK(Linux/macOS)

SDKMAN! 是轻量、命令行驱动的开发工具版本管理器,对 JDK 支持最成熟,自动处理 JAVA_HOMEPATH 切换,无需手动改配置文件。

  • 安装后执行 sdk install java 17.0.1-temsdk install java 21.0.1-tem 等,会把各版本装到 ~/.sdkman/candidates/java/ 下独立子目录
  • sdk use java 17.0.1-tem 临时切换当前 shell 的 JDK;用 sdk default java 21.0.1-tem 设为全局默认
  • 每个版本的 javajavackeytool 都能精准对应,Maven 和 Gradle 自动识别
  • 避免手动设置 JAVA_HOME —— SDKMAN! 会动态注入,且不影响系统级 Java(如 Ubuntu 自带的 /usr/bin/java

Windows 下稳妥做法:手动分目录 + 切换脚本

Windows 没有类 Unix 的符号链接或成熟的版本管理器,SDKMAN! 不原生支持,建议用清晰的目录结构 + 批处理脚本控制 JAVA_HOME

PATH

  • 把不同 JDK 解压到固定路径,例如:C:\dev\jdk-8u292C:\dev\jdk-17.0.2C:\dev\jdk-21.0.1
  • 写一个 setjdk17.bat,内容为:
    set JAVA_HOME=C:\dev\jdk-17.0.2
    set PATH=%JAVA_HOME%\bin;%PATH%
  • 每次新开命令行窗口前先运行对应脚本;PowerShell 用户可用 $env:JAVA_HOME="C:\dev\jdk-21.0.1" 动态设置
  • 注意:不要在系统环境变量里硬编码 JAVA_HOME,否则 IDE(如 IntelliJ)可能缓存旧值,需重启生效

IDE 和构建工具怎么认准 JDK 版本

IDE 和构建工具通常不完全依赖系统 JAVA_HOME,它们有自己的 JDK 配置入口,容易忽略导致“命令行是 JDK 21,IDE 编译报 JDK 8 错误”。

  • IntelliJ IDEA:File → Project Structure → Project Settings → Project → SDK;同时检查 Modules → Language level
  • Eclipse:Preferences → Java → Installed JREs,勾选目标 JDK,并在项目 Properties → Java Build Path → Libraries 中确认使用的是该 JRE
  • Maven:检查 pom.xml 中的 maven-compiler-plugin 是否显式指定 ,否则默认用当前 JAVA_HOME 对应的 JDK 编译
  • Gradle:在 build.gradle 中设置 java.toolchain.version = "17",它会主动查找匹配的本地 JDK,不依赖环境变量
实际操作中最容易漏掉的是 IDE 内部 SDK 设置和 Maven/Gradle 的显式版本声明——它们和终端里的 java -version 是三套独立逻辑,得分别对齐。