IDEA不读JAVA_HOME,必须手动在Platform Settings→SDKs中注册JDK根目录(含bin/java和lib/modules),再分别设置Project SDK和各Module SDK为该JDK,并执行Invalidate Caches and Restart。

IDEA不读JAVA_HOME,必须手动注册Global SDK
IntelliJ IDEA 启动时根本不会去查 JAVA_HOME 或 PATH,它只认自己内部注册过的 JDK 路径。哪怕你命令行里 java -version 和 javac -version 都正常,IDEA 仍可能显示 No JDK specified 或 Project SDK is not defined。
解决办法只有一个:先在全局注册 JDK,再往下配项目和模块。
- 打开
File → Project Structure → Platform Settings → SDKs - 点
+→JDK,**必须选到 JDK 安装根目录**(例如C:\Program Files\Java\jdk-17.0.2),不能进bin、jre或lib子目录 - 确认该目录下存在
bin/java.exe(Windows)或bin/java(macOS/Linux),以及lib/modules(JDK 9+)或lib/rt.jar(JDK 8) - 如果按钮灰掉或提示
Invalid JDK path,大概率是路径指向了 JRE、压缩包、含中文路径,或缺少javac(某些 OpenJDK 构建不带编译器)
Project SDK 和 Module SDK 必须显式对齐
光注册了 Global SDK 不够,Project SDK 和每个 Module SDK 都得手动选中它。IDEA 默认不会继承,也不会自动同步。
常见报错如 Cannot resolve symbol 'java.lang.Object' 或运行按钮灰色,基本都卡在这一步。
- 进
File → Project Structure → Project Settings → Project,在Project SDK下拉框里选刚注册的 JDK - 再进
Modules,逐个检查每个模块的Module SDK—— 它默认可能是None或旧版本,必须手动设为同一 JDK -
Language level建议和 JDK 版本一致(比如 JDK 17 就选17),否则会触发error: invalid target release - 多模块项目尤其要注意:某个模块 SDK 没改,就会单独爆红,不影响其他模块
缓存锁死旧配置,Invalidate Caches 不是可选项
改完 SDK 设置后 IDE 没反应?不是设置错了,是缓存没刷新。IDEA 的索引和类路径状态常被缓存固化,重启都不管用。
- 必须执行
File → Invalidate Caches and Restart → Invalidate and Restart - 勾选
Clear file system cache and local history,否则旧 classpath 仍被复用 - 如果重启后还是不对,关掉 IDEA,删掉项目根目录下的
.idea文件夹和所有*.iml文件,再重新打开项目 - 注意:
Invalidate Caches不会丢项目代码,但会重载 Maven/Gradle 依赖索引,首次打开可能稍慢
PATH里藏着Oracle的javapath,它会偷偷劫持java命令
即使 java -version 看起来正常,也可能只是 Oracle 安装器埋的 javapath 在代理调用——而这个代理路径往往指向已卸载或损坏的 JRE,导致 IDEA 校验失败。
- 打开系统环境变量,检查
Path中是否包含这两项:C:\Program Files\Common Files\Oracle\Java\javapath和C:\ProgramData\Oracle\Java\javapath - 把它们删掉,确保
%JAVA_HOME%\bin(或实际 JDK 的bin路径)排在Path靠前位置 - 新开命令行,运行
where java,输出应唯一指向你安装的 JDK 下的java.exe,而不是 javapath 下的快捷方式 - 这步不做,
javac可能不可用,IDEA 在注册 SDK 时会静默失败
最常被忽略的是 Module SDK 这一层——Project SDK 设对了,但某个模块仍用着 None 或旧 JDK,代码就只在这个模块里爆红,很难一眼定位。


















