1. 概述

本文将详细介绍如何在 IntelliJ IDEA 项目中切换JDK版本。该方法适用于 IntelliJ 的 Community(社区版)Ultimate(旗舰版) 两款IDE。开发者通常会因以下原因切换JDK版本:

  • ✅ 使用新版本Java的语言特性(如 record、switch 模式匹配等)
  • ✅ 适配项目或团队的JDK版本规范
  • ✅ 升级构建依赖,支持新框架(如Spring Boot 3要求Java 17+)

整个过程简单直接,但有几个关键配置点容易踩坑,下文会一一说明。


2. 通过项目结构设置JDK

IntelliJ 将项目的JDK配置保存在 Project Structure(项目结构) 中。进入该设置有两种方式:

  • 菜单路径FileProject Structure
  • 快捷键
    • macOS:⌘ + ;
    • Windows/Linux:Ctrl + Shift + Alt + S

⚠️ 注意:快捷键可能因键盘映射方案不同而变化,可在 Keymap 设置中确认。

成功打开后,会弹出如下对话框:

Popup dialog

Project SDK 下拉框中,可选择已安装的JDK版本。IntelliJ会自动检测系统中已安装的JDK:

Select a new JDK

添加新JDK

若所需版本未列出,可点击 New...JDK,手动指定JDK安装路径,或使用内置下载功能:

Download the JDK directly via IntelliJ

该功能支持从 AdoptOpenJDK、Amazon Corretto、Azul Zulu 等主流发行版中直接下载并安装JDK,非常方便。

设置全局默认JDK

为避免每次新建项目都要重复设置,建议配置全局默认JDK:

  • 若在欢迎界面:点击 New Projects SetupSettings for New Projects...
  • 若已有项目打开:FileNew Projects SetupStructure for New Projects

进入后可统一设置默认的 Project SDKLanguage Level

Make the change permanent

✅ 推荐做法:将全局默认JDK设为团队或公司标准版本,提升一致性。


3. 正确设置语言级别(Language Level)

⚠️ 这是一个高频踩坑点!很多开发者只改了SDK却忽略了 Language Level,导致编译报错。

什么是 Language Level?

  • 它决定了IDE中可用的语法高亮、代码补全、重构等辅助功能
  • 若未显式指定编译目标版本(target bytecode version),则默认使用 Language Level 作为编译输出版本
  • 该设置位于:SettingsBuild, Execution, DeploymentCompilerJava Compiler

常见错误示例

假设我们设置:

  • Project SDK:Java 17
  • Language Level:21

IncorrectLanguageLevel

此时编译会报错:

Java: Invalid Source Release: 17

ErrorMessage

正确做法

Language Level 必须 ≤ Project SDK 版本

修复方式有两种:

  1. 升级 Project SDK 至 Java 21
  2. 降级 Language Level 至 17 或以下

以第一种为例,将 SDK 升至 21 后:

CorrectLanguageLevel

错误消失,项目正常编译。

💡 提示:模块化项目中,可为每个 module 单独设置 Language Level,灵活适配不同模块的兼容性需求。


4. 常见陷阱与注意事项

即使IDE中配置正确,仍可能遇到运行时问题。以下是几个容易被忽视的关键点

❌ 仅改IDE的JDK ≠ 改变命令行JDK

IntelliJ中切换JDK只影响IDE自身的编译和运行环境。当你在终端使用 javajavac 命令时,仍由系统环境变量 JAVA_HOME 决定使用哪个JDK。

# 查看当前命令行使用的JDK
java -version
echo $JAVA_HOME

✅ 建议:保持 JAVA_HOME 与项目JDK版本一致,避免混淆。

❌ 不影响构建工具的JVM版本

更改 Project SDK 不会自动改变Maven或Gradle的运行JVM

  • Maven:由 maven.home 或命令行启动JVM决定
  • Gradle:由 gradle.properties 中的 org.gradle.java.home 或 wrapper 配置决定

示例:强制Gradle使用特定JDK

# gradle.properties
org.gradle.java.home=/Library/Java/JavaVirtualMachines/openjdk-17.jdk/Contents/Home

Maven多版本管理

使用 maven-compiler-plugin 显式指定源码和目标版本:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.11.0</version>
    <configuration>
        <source>17</source>
        <target>17</target>
    </configuration>
</plugin>

✅ 最佳实践:在构建脚本中显式声明Java版本,确保CI/CD和本地环境一致。


5. 总结

本文系统梳理了在 IntelliJ 中切换 Java 版本的核心步骤与常见陷阱:

  • ✅ 通过 Project Structure 修改 Project SDK
  • ✅ 同步调整 Language Level,确保其 ≤ SDK 版本
  • ✅ 推荐配置 全局默认JDK,提升新项目初始化效率
  • ✅ 注意:IDE设置 ≠ 命令行JDK ≠ 构建工具JVM
  • ✅ 构建脚本中应显式指定Java版本,避免环境差异导致问题

只要记住这几点,切换JDK就是一件简单粗暴又安全的操作。更多细节可参考 JetBrains 官方文档:Project Structure


原始标题:How to Change the Java Version in an IntelliJ Project | Baeldung