问题现象
当控制台输出 java: 警告:源发行版 17 需要目标发行版 17 时,说明编译器认为源代码的发布级别与目标字节码版本不匹配。这通常发生在升级 JDK 后,但项目配置未同步更新的情况。
排查步骤
1. 确认 JDK 环境
首先得保证你本地确实装了 JDK 17。终端执行以下命令查看当前版本:
java -version
javac -version
如果显示的不是 17.x,建议去 Oracle 或 Adoptium 下载安装。注意,Maven 和 Gradle 默认会读取系统环境变量里的 JDK,所以这里必须一致。
2. 修正构建工具配置
不同构建工具的写法略有差异,重点是把'源'和'目标'都锁定在 17。
Maven 项目
在 pom.xml 里,除了插件版本,更推荐直接使用 release 属性,它会自动处理源和目标的一致性:
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.release>17</maven.compiler.release>
</properties>
如果是 Spring Boot 项目,记得父依赖版本也要支持 JDK 17,比如 spring-boot-starter-parent 3.1.0 以上。
Gradle 项目 Groovy DSL 下可以这样显式指定:
tasks.withType(JavaCompile) {
sourceCompatibility = '17'
targetCompatibility = '17'
}
或者更现代的方式,利用 Java Toolchains:
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
3. 检查环境变量
有时候 IDE 没问题,但命令行跑不起来,多半是环境变量指错了。
Windows 下执行 echo %JAVA_HOME%,Linux/macOS 执行 echo $JAVA_HOME。确保路径指向 JDK 17 的安装根目录,且 PATH 变量里包含了 %JAVA_HOME%\bin。
4. IDE 设置同步
如果你用的是 IntelliJ IDEA,光改配置文件可能不够,IDE 缓存的配置也得跟上。

