问题表现
java: 警告:源发行版 17 需要目标发行版 17
看到这个报错别急,核心原因很简单:你的源码编译级别和目标字节码级别不匹配。通常是因为 JDK 安装版本、IDE 设置或者构建工具配置里混用了不同版本的参数。我们按从外到内的顺序排查。
1. 确认本地 JDK 环境
先确保系统里装的是 JDK 17。在终端运行以下命令查看当前生效的版本:
java -version
javac -version
如果输出不是 17.x,请去 Oracle 官网或 Adoptium 下载对应版本并安装。注意,Maven 和 Gradle 默认可能调用的是系统环境变量里的 JDK,所以这里要统一。
2. 检查构建工具配置
如果是 Maven 项目,重点看 pom.xml。父工程依赖和编译器插件版本都要跟上。Spring Boot 3.x 系列通常要求 JDK 17,对应的插件建议升级到 3.11.0 以上。
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.release>17</maven.compiler.release>
</properties>
推荐优先使用 release 属性,它同时控制源码兼容性和目标字节码版本,避免两边设错。
Gradle 用户则需要在 build.gradle 里显式指定兼容性,或者直接使用 Java 工具链自动管理:
tasks.withType(JavaCompile) {
sourceCompatibility = '17'
targetCompatibility = '17'
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
3. IDE 设置核对
很多时候问题出在 IDE 上。以 IntelliJ IDEA 为例,双击进入项目结构,检查 Project SDK 和 Project language level 是否都选成了 17。
另外,全局编译器设置里也有一个坑:Build, Execution, Deployment > Compiler > Java Compiler 下的 Target bytecode version 必须也是 17。有时候项目级设对了,但模块级或全局设置被覆盖了,导致编译时依然报错。
4. 环境变量兜底
最后检查一下 JAVA_HOME 环境变量。Windows 下用 echo %JAVA_HOME%,Linux/macOS 用 echo $JAVA_HOME。确保路径指向正确的 JDK 17 目录,且 PATH 变量里包含了 %JAVA_HOME%\bin。
按这个顺序过一遍,基本能覆盖 99% 的此类报错场景。

