1. 遇到"无效的目标发行版21"错误怎么办?
最近在升级SpringBoot项目时,遇到了一个让人头疼的问题:编译时报错"无效的目标发行版21"。这个错误通常发生在使用较新版本的JDK(比如JDK 21)编译老版本的SpringBoot项目时。我第一次遇到这个问题时也是一头雾水,花了大半天时间才找到原因。
这个错误的本质是JDK版本和SpringBoot版本不兼容。比如你本地安装了JDK 21,但项目使用的是SpringBoot 2.x版本,就会出现这个问题。SpringBoot 2.x系列最高只支持到JDK 17,而SpringBoot 3.x才开始支持JDK 21。
2. 为什么会出现版本冲突?
2.1 SpringBoot的版本维护策略
Spring官方对SpringBoot版本的维护有明确的策略。SpringBoot 2.x系列在2023年11月已经停止维护,这意味着官方不再为这个版本提供更新和支持。而SpringBoot 3.x系列最低要求JDK 17,不再支持JDK 8。
这就导致了一个尴尬的局面:如果你还在使用JDK 8,就只能停留在SpringBoot 2.x;如果想用SpringBoot 3.x的新特性,就必须升级到JDK 17或更高版本。
2.2 JDK的兼容性问题
JDK的版本兼容性也是一个重要因素。高版本的JDK可以编译低版本的代码(比如用JDK 21编译-target 1.8的代码),但反过来就不行。这就是为什么当你用JDK 21编译SpringBoot 2.x项目时会报错。
在实际开发中,我遇到过这样的情况:团队中有人用JDK 21开发,有人用JDK 8,结果项目在不同机器上编译结果不一致,造成了很大困扰。
3. 快速解决方案
3.1 调整Maven配置
最直接的解决方法是在pom.xml中明确指定Java版本。找到maven-compiler-plugin插件,添加如下配置:
<plugin>
<groupId>

1754

被折叠的 条评论
为什么被折叠?



