应手动指定JDK路径并同步设置Project SDK与language level;多模块项目需单独配置Module SDK;检查gradle.properties、idea.jdk及gradlew中JAVA_HOME是否指向新JDK。

找不到 JDK 或提示 “No SDK specified” 怎么办
这是 IDEA 启动新项目或打开旧项目时最常卡住的第一步:它压根没找到你装好的 JDK。根本原因通常是 IDEA 没法自动发现系统环境变量里的 JAVA_HOME,尤其在 macOS/Linux 用 zsh、Windows 用非管理员账户安装 JDK 时特别容易失效。
实操建议:
- 别依赖自动检测——手动指定路径更稳。macOS 上 JDK 通常在
/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home;Windows 多在C:\Program Files\Java\jdk-17.0.1;Linux 则可能是/usr/lib/jvm/java-17-openjdk-amd64(用update-java-alternatives -l确认) - 路径里不能有空格或中文——哪怕看起来正常,IDEA 有时会静默失败。比如
C:\Program Files\Java\...建议改用C:\Progra~1\Java\...或直接挪到D:\jdk17 - 选完路径后务必点
OK→Apply,只点OK不生效
Project SDK 和 Project language level 不匹配的坑
就算 JDK 路径对了,编译仍报错 “diamond operator is not supported” 或 “var is not supported”,大概率是语言级别没对齐。IDEA 把 JDK 版本和语法支持拆成两层控制,很多人只调了前者。
实操建议:
-
Project SDK决定你能用哪些类库(如java.net.http在 JDK 11+ 才有),Project language level决定你能写哪些语法(如var、switch表达式)。两者要一致,或至少后者 ≤ 前者 - 如果用 JDK 17,但
language level还卡在 8,Lambda 都会标红。进File > Project Structure > Project,两个下拉框必须同步选17 - Maven/Gradle 项目还要检查
pom.xml里的maven-compiler-plugin或sourceCompatibility,否则运行时可能和 IDEA 编译行为不一致
模块级 Module SDK 覆盖全局设置的场景
多模块项目里,某个模块跑测试要用 JDK 11,主模块却得用 JDK 17——这时候全局 Project SDK 就不够用了。IDEA 允许模块单独指定 SDK,但默认不启用,得手动开。
实操建议:
- 右键模块 →
Open Module Settings→ 左侧选模块 → 右侧Dependencies标签页 →Module SDK下拉框从Inherit project SDK改成具体版本 - 注意:模块 SDK 只影响该模块的编译和代码补全,不影响运行配置(
Run Configuration里的 JRE 还得单独设) - 如果模块 SDK 设成未安装的版本(比如选了
14但本地只有11和17),模块名会变红,且所有 Java 文件失去语法高亮
更换 JDK 后 gradle.properties 或 idea.jdk 残留导致失效
重装 JDK 或换版本后,IDEA 有时仍沿用旧路径,甚至新建项目都拉不出新 JDK。不是缓存问题,而是某些隐藏配置文件硬编码了路径。
实操建议:
- 检查
~/.gradle/gradle.properties(macOS/Linux)或%USERPROFILE%\.gradle\gradle.properties(Windows)里有没有org.gradle.java.home=...,删掉或改成新 JDK 路径 - IDEA 自己的启动配置文件
idea.jdk(位于 IDEA 安装目录bin/下)也可能锁死 JDK,用文本编辑器打开,确认IDEA_JDK_64指向正确位置 - 改完记得重启 IDEA——热加载不识别这些底层配置变更
最容易被忽略的是 Gradle wrapper 自带的 JDK 绑定:如果 gradlew 脚本里硬写了 JAVA_HOME,那即使 IDEA 设置再对,构建也会走错路。










