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

 更新时间:2025年12月20日 14:47:30   作者:wfyflyy  
在电脑已经安装之前主流的jdk1.8后避免不了要安装新的主流jdk17,本章主要目的是介绍不同项目和场景间切换JDK 1.8和JDK 17,提高开发效率并避免版本冲突(包括windows、macOS、Linux、IDE)

在电脑已经安装之前主流的jdk1.8后避免不了要安装新的主流jdk17,本章主要目的是介绍简单的方式切换,并且指出一些容易发生的一些小错误。

Windows 系统切换方法

手动配置环境变量(传统方法)

1.下载完jdk17后,可以将其与jdk8放在同一文件下。

 2.右击我的电脑进入环境配置,一般我们配置好的jdk1.8为以下

3. 同样的原理,点击新建,起个变量名JDK17,找到下载jdk17的路径复制到变量值,点击确定。

4. 我们之前配置jdk8可能是下面这个变量值,有些人的是jdk8的路径,建议用下面这个方法,因为这是傻瓜的精髓。

5. win+r输入cmd输入java -version(中间空格)会出现下面证明此时正是jdk8版本

 6.回到环境变量只需将%JDK8%改为%JDK17%即可(8改17傻瓜不),点击确认,然后重新打开win+r(必须重新打开)按照5进行会出现以下,证明已经切换成功。

注:有些人切换的时候并未切换到JDK17,我也遇到了这个问题,那是因为在Path中下载jdk17的时候自动给我们加了两行,只要删除这两行(这里我已经删除了,删除的与第一行相似,但是未删除前位于前两行),再重新打开win+r,按照5进行就会出现。

使用 JEnv for Windows

安装步骤:

# 1. 安装 Chocolatey(Windows 包管理器)
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

# 2. 使用 Chocolatey 安装 JEnv
choco install jenv

# 3. 或者使用 Scoop 安装
scoop bucket add versions
scoop install jenv-win

配置和使用:

# 添加 JDK 到 JEnv
jenv add "C:\Java\jdk1.8.0_381" 1.8
jenv add "C:\Java\jdk-17.0.10" 17

# 查看已安装的 JDK
jenv versions

# 全局切换
jenv global 1.8    # 切换到 JDK 8
jenv global 17     # 切换到 JDK 17

# 本地目录切换(仅当前目录有效)
cd my-java8-project
jenv local 1.8

cd my-java17-project
jenv local 17

# 仅当前shell会话切换
jenv shell 17

macOS 系统切换方法

使用 Homebrew + jenv

步骤一:安装工具

# 1. 安装 Homebrew(如果未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 2. 安装 jenv
brew install jenv

# 3. 配置 shell(根据你的 shell)
# bash 用户
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(jenv init -)"' >> ~/.bash_profile

# zsh 用户
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc

# 重新加载配置
source ~/.zshrc   # 或 source ~/.bash_profile

步骤二:安装多版本 JDK

# 方法1:使用 Homebrew 安装多个 JDK
brew tap homebrew/cask-versions
brew install --cask temurin8    # JDK 8
brew install --cask temurin17   # JDK 17

# 方法2:如果已手动安装,添加到 jenv
# 通常安装位置:
# JDK 8: /Library/Java/JavaVirtualMachines/jdk1.8.0_381.jdk/Contents/Home
# JDK 17: /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home

jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_381.jdk/Contents/Home
jenv add /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home

步骤三:使用 jenv 管理

# 查看所有可用的 JDK
jenv versions

# 设置全局默认版本
jenv global 1.8.0.381
# 或
jenv global 17.0

# 设置项目特定版本
cd ~/projects/java8-project
jenv local 1.8.0.381

cd ~/projects/java17-project
jenv local 17.0

# 查看当前使用的版本
jenv version

# 在当前 shell 会话中临时切换
jenv shell 17.0

Linux 系统切换方法

使用 update-alternatives(Ubuntu/Debian)

# 1. 安装两个 JDK(如果未安装)
sudo apt update
sudo apt install openjdk-8-jdk openjdk-17-jdk

# 2. 注册到 alternatives 系统
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/java-8-openjdk-amd64/bin/java" 1
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-8-openjdk-amd64/bin/javac" 1
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/java-17-openjdk-amd64/bin/javac" 2

# 3. 切换版本
sudo update-alternatives --config java
# 会显示:
# 有 2 个候选项可用于替换 java (提供 /usr/bin/java)。
# 
#   选择       路径                                          优先级  状态
# ------------------------------------------------------------
# * 0            /usr/lib/jvm/java-17-openjdk-amd64/bin/java   2       自动模式
#   1            /usr/lib/jvm/java-8-openjdk-amd64/bin/java    1       手动模式
#   2            /usr/lib/jvm/java-17-openjdk-amd64/bin/java   2       手动模式
# 
# 要维持当前值[*]请按<回车键>,或者键入选择的编号:

# 同样切换 javac
sudo update-alternatives --config javac

# 4. 验证
java -version
javac -version

IDE 中的版本切换

IntelliJ IDEA 配置

项目级配置:

File → Project Structure (Ctrl+Alt+Shift+S)
  → Project Settings → Project
    → Project SDK: 添加多个 JDK
    → Project language level: 选择对应版本
  
  → Project Settings → Modules
    → 每个模块可以单独设置 SDK

运行配置:

Run → Edit Configurations
  → 选择要修改的运行配置
  → 右侧找到 "JRE"
  → 选择对应的 JDK 版本
  
或者:
Alt+Shift+F10 → Edit Configurations

全局配置:

File → Settings (Ctrl+Alt+S)
  → Build, Execution, Deployment
    → Build Tools → Gradle/Maven
      → Gradle JVM: 选择 JDK 版本

Eclipse 配置

1. 添加多个 JDK
   Window → Preferences
     → Java → Installed JREs
       → Add... → Standard VM
       → 选择 JDK 安装目录

2. 项目级配置
   右键项目 → Properties
     → Java Build Path → Libraries
       → JRE System Library → Edit...
         → 选择 Alternate JRE

3. 运行配置
   Run → Run Configurations
     → Java Application
       → 选择要配置的类
       → JRE 标签页
         → 选择 Runtime JRE

VSCode 配置

settings.json 配置:

{
  "java.configuration.runtimes": [
    {
      "name": "JavaSE-1.8",
      "path": "C:\\Java\\jdk1.8.0_381",
      "default": false
    },
    {
      "name": "JavaSE-17",
      "path": "C:\\Java\\jdk-17.0.10",
      "default": true
    }
  ],
  
  // 工作区特定设置
  "java.jdt.ls.java.home": "C:\\Java\\jdk-17.0.10",
  
  // Maven 配置
  "java.configuration.maven.userSettings": "C:\\path\\to\\settings.xml",
  "maven.terminal.customEnv": [
    {
      "environmentVariable": "JAVA_HOME",
      "value": "C:\\Java\\jdk-17.0.10"
    }
  ]
}

工作区 .vscode/settings.json

{
  // 这个项目使用 Java 8
  "java.configuration.runtimes": [
    {
      "name": "JavaSE-1.8",
      "path": "/usr/lib/jvm/jdk1.8.0_381",
      "default": true
    }
  ],
  "java.home": "/usr/lib/jvm/jdk1.8.0_381"
}

常见问题解决

问题1:切换后版本没变

# 原因:PATH 中有其他 java
echo $PATH | tr ':' '\n'
which -a java   # 查看所有 java 命令位置

# 解决:确保正确的路径在前面
export PATH="$JAVA_HOME/bin:$PATH"

问题2:IDE 不使用系统设置的 JAVA_HOME

解决:
1. IDE 内重新配置 SDK
2. 重启 IDE
3. 清理 IDE 缓存
4. 检查 IDE 的配置文件

总结建议

  • 个人开发推荐:使用 SDKMAN!(Linux/macOS)或 jenv(Windows)

  • 团队开发推荐:统一使用 Docker 容器化,确保环境一致

通过以上方法,你可以轻松地在不同项目和场景间切换 JDK 1.8 和 JDK 17,提高开发效率并避免版本冲突。

到此这篇关于JDK1.8与JDK17多版本共存相互切换(windows、macOS、Linux、IDE)的文章就介绍到这了,更多相关JDK1.8与JDK17自由切换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 用Java连接sqlserver数据库时候几个jar包的区别分析

    用Java连接sqlserver数据库时候几个jar包的区别分析

    这篇文章主要介绍了用Java连接sqlserver数据库时候几个jar包的区别分析,需要的朋友可以参考下
    2014-10-10
  • shiro之记住登录信息

    shiro之记住登录信息

    Shiro提供了记住我(RememberMe)的功能,当关闭浏览器时下次再次打开还能记住你的信息,下面小编给大家分享shiro之记住登录信息的相关知识,感兴趣的朋友一起看看吧
    2017-09-09
  • Java必须掌握的 4 大基础

    Java必须掌握的 4 大基础

    我们一直在学习Java,但Java中总有一些概念含混不清,不论是对初级还是高级程序员都是如此。所以,这篇文章的目的就是弄清楚这些概念,需要的小伙伴可以参考以下哟
    2021-09-09
  • java实现简单银行家算法

    java实现简单银行家算法

    这篇文章主要为大家详细介绍了java实现简单银行家算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • 详解Java如何利用反射提高代码的灵活性

    详解Java如何利用反射提高代码的灵活性

    反射是Java语言的一种特性,它允许程序在运行时动态地获取类的信息并操作类的属性、方法和构造函数,使得我们的代码更加灵活和可扩展,下面就来看看Java中反射机制的具体操作吧
    2023-05-05
  • Spring Boot中Bean定义方调用方式解析

    Spring Boot中Bean定义方调用方式解析

    这篇文章主要介绍了Spring Boot中Bean定义方调用方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Java使用poi获取不到docx表格中书签的问题及解决

    Java使用poi获取不到docx表格中书签的问题及解决

    这篇文章主要介绍了Java使用poi获取不到docx表格中书签的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 使用JVM常用GC日志打印参数

    使用JVM常用GC日志打印参数

    这篇文章主要介绍了使用JVM常用GC日志打印参数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java super关键字调用父类过程解析

    Java super关键字调用父类过程解析

    这篇文章主要介绍了Java super关键字调用父类过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Mybatis之通用Mapper动态表名及其原理分析

    Mybatis之通用Mapper动态表名及其原理分析

    这篇文章主要介绍了Mybatis之通用Mapper动态表名及其原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08

最新评论