JDK1.8与JDK17多版本共存相互切换(windows、macOS、Linux、IDE)

好的,这是一个非常实际且常见的开发环境问题。在同一台机器上管理多个JDK版本并实现灵活切换,对于开发和测试至关重要。下面我将为您详细讲解在 ​Windows、macOS、Linux​ 三大操作系统以及主流 ​IDE(IntelliJ IDEA & Eclipse)​​ 中的实现方法。

图片[1]_JDK1.8与JDK17多版本共存相互切换(windows、macOS、Linux、IDE)_知途无界

核心思想

无论哪个平台,多版本共存的核心理念都是:

  1. 安装多个JDK​:将不同版本的JDK安装到不同的目录,互不影响。
  2. 配置环境变量​:通过设置系统环境变量(如 PATH, JAVA_HOME)或使用版本管理工具,来控制当前终端或应用程序使用哪个JDK。

第一章:操作系统层面的配置

这是最基础的一步,确保你在命令行终端中可以使用不同的Java版本。

1. Windows 系统

方法一:手动配置环境变量(推荐学习原理)

步骤:​

  1. 安装JDK​:从Oracle或OpenJDK网站下载JDK 1.8和JDK 17,安装到自定义目录,例如:
    • C:\Program Files\Java\jdk1.8.0_291
    • C:\Program Files\Java\jdk-17.0.1
  2. 配置 JAVA_HOME 变量​:
    • 右键“此电脑” -> “属性” -> “高级系统设置” -> “环境变量”。
    • 在“系统变量”中,新建一个变量:
      • 变量名:JAVA_HOME
      • 变量值:指向你想使用的JDK路径,例如 %JAVA_HOME_8%%JAVA_HOME_17%(需要先创建这些变量)。
    • 为了便于切换,建议先创建两个系统变量:
      • JAVA_HOME_8 = C:\Program Files\Java\jdk1.8.0_291
      • JAVA_HOME_17 = C:\Program Files\Java\jdk-17.0.1
      • 然后让 JAVA_HOME 的值指向其中一个,如 %JAVA_HOME_8%
  3. 编辑 Path 变量​:
    • 在“系统变量”中找到并选中 Path 变量,点击“编辑”。
    • 确保 %JAVA_HOME%\bin 在列表的最顶端​(使用“上移”按钮),这样可以优先使用我们配置的JDK。
  4. 验证与切换​:
    • 打开一个新的命令提示符(CMD)​PowerShell​(重要:必须重启终端才会加载新的环境变量)。
    • 输入 java -version 查看当前版本。
    • 要切换版本时,只需回到“环境变量”设置,将 JAVA_HOME 的值从 %JAVA_HOME_8% 改为 %JAVA_HOME_17%,然后重启终端即可。
方法二:使用批处理脚本(快速切换)

创建一个简单的批处理文件来快速修改 JAVA_HOME 并刷新环境变量。

​**switch-jdk8.bat**​

@echo off
setx JAVA_HOME "C:\Program Files\Java\jdk1.8.0_291"
echo Switched JAVA_HOME to JDK 8.
echo Please close and reopen your terminal.
pause

​**switch-jdk17.bat**​

@echo off
setx JAVA_HOME "C:\Program Files\Java\jdk-17.0.1"
echo Switched JAVA_HOME to JDK 17.
echo Please close and reopen your terminal.
pause

注意:setx 命令会永久设置用户环境变量,但只对新打开的终端生效。

2. macOS 系统

macOS推荐使用强大的版本管理工具 ​SDKMAN!​,也可以手动配置。

方法一:使用 SDKMAN!(强烈推荐)

SDKMAN! 是Unix-like系统上的JDK版本管理神器,可以同时管理Java、Maven、Gradle等多种SDK。

步骤:​

  1. 安装 SDKMAN!​​: curl -s "https://get.sdkman.io" | bash 安装后,重启终端或执行 source "$HOME/.sdkman/bin/sdkman-init.sh"
  2. 列出可用的JDK​: sdk list java 这会显示一个很长的列表,包含各大厂商(AdoptOpenJDK/Heroku/Zulu等)的JDK版本。
  3. 安装指定版本的JDK​: # 安装 JDK 8 (AdoptOpenJDK) sdk install java 8.0.392-tem # 安装 JDK 17 (AdoptOpenJDK) sdk install java 17.0.8-tem
  4. 切换版本​: # 为当前终端会话设置默认版本 sdk default java 8.0.392-tem # 或者,仅为当前终端会话设置版本(关闭终端后失效) sdk use java 17.0.8-tem
  5. 验证​: java -version
方法二:手动配置(使用Shell配置文件)
  1. 安装JDK​:下载JDK并解压到合适目录,例如 /Library/Java/JavaVirtualMachines/
    • /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home
    • /Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home
  2. 编辑Shell配置文件​:根据你使用的Shell(bash或zsh),编辑对应的配置文件(~/.bash_profile, ~/.zshrc)。 export JAVA_8_HOME=$(/usr/libexec/java_home -v1.8) export JAVA_17_HOME=$(/usr/libexec/java_home -v17) # 默认使用 JDK 8 export JAVA_HOME=$JAVA_8_HOME
  3. 创建切换函数​:在同一个配置文件中添加别名或函数以便快速切换。 alias useJava8='export JAVA_HOME=$JAVA_8_HOME' alias useJava17='export JAVA_HOME=$JAVA_17_HOME'
  4. 生效配置​: source ~/.zshrc # 或 source ~/.bash_profile
  5. 切换​:在终端中直接输入 useJava17 即可切换。

3. Linux 系统

Linux的配置与macOS非常相似,同样推荐使用SDKMAN!,或者使用 update-alternatives 工具。

方法一:使用 SDKMAN!

步骤与macOS完全相同。SDKMAN!在Linux上同样表现出色。

方法二:使用 update-alternatives(系统级管理)

这是Debian/Ubuntu等系统自带的工具,可以管理系统软件的多个版本。

步骤:​

  1. 安装JDK​:使用 apt 或从官网下载压缩包。
  2. 配置 alternatives​: # 添加 java 命令 sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.8.0_291/bin/java" 1 sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk-17.0.1/bin/java" 2 # 添加 javac 命令 sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.8.0_291/bin/javac" 1 sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk-17.0.1/bin/javac" 2
  3. 切换版本​: sudo update-alternatives --config java sudo update-alternatives --config javac 执行后会显示一个列表,让你选择要使用哪个版本。

第二章:IDE 层面的配置(以 IntelliJ IDEA 为例)

现代IDE都允许你为每个项目单独配置JDK,这是最重要的实践。

步骤(IntelliJ IDEA):​

  1. 打开项目结构设置​:
    • 菜单栏 -> File -> Project Structure (或按 Ctrl+Alt+Shift+S)。
  2. 配置 SDKs​:
    • 在 ​Platform Settings -> SDKs​ 面板中,点击 + 号 -> Add SDK -> Download JDK...Add JDK...
    • 你可以直接从IDE下载JDK,或者指向你已经安装在电脑上的JDK路径(如 C:\Program Files\Java\jdk-17.0.1)。
    • 添加JDK 1.8和JDK 17后,它们会出现在左侧列表中。
  3. 配置项目的 JDK​:
    • 在 ​Project Settings -> Project​ 面板中:
      • Project SDK​:下拉选择当前项目要使用的JDK(如 JDK 17)。
      • Project language level​:选择与JDK匹配的级别(如 17 - Sealed types, always-strict floating-point semantics)。
  4. 配置模块的 JDK(如果需要)​​:
    • 在 ​Project Settings -> Modules​ 面板中,可以为每个模块单独设置 Module SDK
  5. 配置运行/调试配置​:
    • 点击工具栏的运行配置下拉菜单 -> Edit Configurations...
    • Build and run 部分,确保每个运行配置的 JRE 是你期望的版本。通常它会自动继承项目的SDK。

Eclipse 配置:​

  1. 安装JDK​:确保JDK已安装,Eclipse能识别到。
  2. 配置已安装的JRE​:
    • Window -> Preferences -> Java -> Installed JREs -> Add… -> Standard VM -> Next。
    • 点击 Directory 按钮,指向你的JDK安装目录(注意:是JDK目录,不是JRE目录),Finish。
  3. 为项目指定JRE​:
    • 在项目上右键 -> Build Path -> Configure Build Path -> Libraries 标签页。
    • 选中旧的JRE,点击 Remove
    • 点击 Add Library... -> JRE System Library -> Next -> 选择 Workspace default JRE(如果已配置好)或 Alternate JRE -> 选择你需要的JDK 17或8 -> Finish。

总结与最佳实践

场景推荐方法优点
命令行全局切换Windows: 环境变量+批处理
macOS/Linux: SDKMAN!
SDKMAN! 跨平台,一键安装、切换,极其方便。
系统级管理Linux: update-alternatives
macOS: Shell脚本
系统级统一管理,对所有用户和应用生效。
项目开发IDE (IntelliJ/Eclipse)​最重要!​​ 每个项目独立配置,互不干扰,是现代开发的基石。
临时测试IDE 的运行配置可以在不更改项目SDK的情况下,为单次运行指定不同的JRE。

核心建议:​

  1. 永远在IDE中为不同项目配置不同的JDK,这是隔离项目环境、避免“在我机器上是好的”这类问题的关键。
  2. 对于命令行工具的开发或需要全局环境的场景,再使用操作系统层面的版本管理(如SDKMAN!)。
  3. 理解 JAVA_HOME 环境变量的作用,它是许多构建工具(Maven, Gradle, Tomcat)寻找JDK的依据。
© 版权声明
THE END
喜欢就点个赞,支持一下吧!
点赞24 分享
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容