IDEA不会自动发现解压安装的OpenJDK,需手动在Project Structure中添加SDK根目录(非bin),并为Project、各Module及运行配置分别指定该SDK,确保版本与language level、构建工具配置一致。

确认本地 OpenJDK 已安装且路径可用
IDEA 不会自动发现你系统里装的 OpenJDK,尤其当你用 zip 解压方式安装(比如从 Adoptium Temurin 或 Red Hat build of OpenJDK 下载的免安装包),它根本不会注册到系统环境变量里。所以第一步不是打开 IDEA,而是先在终端验证:
- 运行
java -version—— 如果没输出或报“command not found”,说明当前 shell 没配JAVA_HOME或PATH,但这不影响 IDEA 配置,只是提醒你:别指望 IDEA 读取系统默认 JDK - 手动找路径:Windows 常见如
D:\jdk-17.0.2+8,macOS 如/Users/xxx/Downloads/jdk-17.0.2+8/Contents/Home,Linux 如/opt/jdk-17.0.2+8;关键看目录下是否有bin、lib、conf这些子目录,而不是jre或src.zip - 路径里不能有空格或中文——如果解压到了
C:\Program Files\...,要么重解压到D:\jdk17,要么用短路径(Windows)或符号链接(macOS/Linux)
在 Project Structure 中添加 OpenJDK SDK
IDEA 的 SDK 配置是独立于系统环境变量的,必须手动导入。快捷键 Ctrl+Alt+Shift+S(Windows/Linux)或 Cmd+;(macOS)打开 Project Structure:
- 左侧选
SDKs→ 点+→JDK→ 浏览到你刚才确认的 OpenJDK 根目录(再次强调:是Home目录,不是bin子目录) - IDEA 会自动识别版本并显示名称如
17 (17.0.2),你可以改名为temurin-17.0.2方便区分 - 别急着关窗口——此时 SDK 只是“已添加”,还没绑定到项目。必须再切到左侧
Project,在Project SDK下拉框中手动选中这个新添加的 SDK - 同步设置
Project language level:JDK 17 就选17,JDK 21 就选21;不匹配会导致sealed、record、switch表达式等语法编译失败
测试模块和运行配置必须显式指定 JDK
很多人设完 Project SDK 后跑单元测试仍报错,原因在于:测试代码可能走的是 Maven/Gradle 构建流程,或 IDEA 自己的测试 runner,它们默认不继承 Project SDK。
- Maven 项目:检查
pom.xml是否有<source>17</source>和<target>17</target>,且值与你配置的 SDK 一致 - Gradle 项目:确认
build.gradle中java { sourceCompatibility = JavaVersion.VERSION_17 },同时testtask 没额外覆盖 JVM 参数 - 右上角运行配置 →
Edit Configurations→ 左侧选中你的 JUnit/TestNG 配置 → 右侧JRE下拉菜单选Project default(不是 “Bundled” 或 “Default”) - 如果测试依赖了
javafx或jdk.internal.*类,还要在VM options里加--add-opens参数,否则运行时抛IllegalAccessError
多模块项目里 Module SDK 容易被忽略
哪怕你把 Project SDK 设对了,只要项目含多个 module(比如 app、common、integration-test),每个 module 默认仍是 None 或旧 SDK,IDEA 不会自动继承。
- 在
Project Structure→ 左侧选Modules→ 逐个点开每个 module - 在
Dependencies标签页下,找到Module SDK,必须手动从下拉框中选择你刚添加的 OpenJDK(例如temurin-17.0.2) - 特别注意
test源码目录对应的 module —— 它的 SDK 错了,JUnit 就会用错版本的java.lang.Class加载测试类,导致NoClassDefFoundError或IncompatibleClassChangeError - 改完一个 module 后点
Apply,再切下一个;全部设完再点最外层的OK


















