小P学长
小P学长

IntelliJ 无效的源发行版:区分 Project SDK、Language level 和 Gradle JVM

java -version 正常不等于项目编译链正确。逐层核对 JDK、javac、Project SDK、模块 SDK、语言级别与 Gradle JVM。

先理解:一个 IDEA 项目可能同时存在多个 Java 版本开关

java -version 显示的是 PATH 中被执行的 Java 运行时。项目编译还可能受 javac、IntelliJ Project SDK、Module SDK、Language level、Java Compiler target bytecode、Gradle JVM、toolchain 或 Maven compiler 配置影响。只修其中一处,错误很可能仍然存在。

1. 先在项目终端保存证据

java -version
javac -version
# Gradle 项目
./gradlew --version
# Maven 项目
./mvnw -version

javac 不存在,你可能只安装了运行时,或 PATH/JAVA_HOME 指向不完整的安装。若 Gradle 报告的 JVM 与 java -version 不同,应先解释这个差异,不要盲目删依赖。

2. 按这个顺序核对 IDEA

  1. Project SDK:是项目默认的 JDK。
  2. Module SDK:模块可继承项目 SDK,也可单独覆盖。
  3. Language level:定义源代码可用的语法特性;JetBrains 官方说明它可以与 Project SDK 不同。
  4. Gradle JVM:Gradle 项目要另外核对运行 Gradle 的 JVM,它可受 org.gradle.java.home 或 IDE 配置影响。
  5. 构建脚本:以仓库中的 sourceCompatibility、toolchain、--release 或 Maven 配置为团队真实合同。

3. 不要靠把所有数字改成最新版解决

项目要在 Java 17 上运行,就应明确编译目标与 CI 验证;不能因为本机有 JDK 25 就把语言级别、字节码目标和 Gradle JVM 全改成 25。老 Gradle 也可能不支持由新 JDK 运行,应核对项目 wrapper 与 Gradle 官方兼容表。

验收标准

  1. ./gradlew --version./mvnw -version 显示的 JVM 符合项目合同。
  2. 命令行 wrapper 构建与 IDE 构建都通过。
  3. 重新导入项目后配置不会回退,团队成员不需要依赖你的绝对 JDK 路径。

官方来源

同一问题集群的免费排障页

按你当前看到的报错选一页,不需要从头阅读全部内容。