
本文详解如何解决因 spring boot maven 插件(如 buildinfomojo)使用高版本 jdk 编译,导致在 jdk 8 环境下执行 `mvn clean install` 时出现 “class file version 61.0 … up to 52.0” 的版本不兼容错误。
该错误的根本原因在于:Spring Boot 2.6+ 版本的 Maven 插件(如 spring-boot-maven-plugin)已默认使用 JDK 17(对应字节码版本 61.0)编译,而你的构建环境运行在 JDK 8(仅支持最高字节码版本 52.0)上。即使项目源码使用 JDK 8 编写,Maven 插件本身作为第三方库被加载时,其 class 文件版本若超出 JVM 能力范围,就会立即抛出 UnsupportedClassVersionError。
值得注意的是,错误中提到的 org/springframework/boot/maven/BuildInfoMojo 并非你项目中的类,而是 Spring Boot 官方 Maven 插件中的一个 Mojo 类——它在 mvn clean install 过程中由 Maven 运行时动态加载执行。因此,问题不在于你的 pom.xml 中 java.version> 或
✅ 正确解决方案是 显式声明与 JDK 8 兼容的 spring-boot-maven-plugin 版本。Spring Boot 官方文档明确指出:
- Spring Boot 2.1.x 支持 JDK 8,其配套插件也基于 JDK 8 编译(字节码 52.0);
- Spring Boot 2.6+ 要求最低 JDK 17,不再保证对 JDK 8 的插件二进制兼容。
因此,请将 pom.xml 中的插件配置从(例如):
立即学习“Java免费学习笔记(深入)”;
org.springframework.boot spring-boot-maven-plugin
显式降级并锁定为 JDK 8 兼容版本,推荐使用 2.1.18.RELEASE(Spring Boot 2.1.x 最终维护版,完全兼容 JDK 8):
org.springframework.boot spring-boot-maven-plugin 2.1.18.RELEASE
⚠️ 重要注意事项:
- 不要仅靠修改
中的 Spring Boot 版本(如 2.1.2.RELEASE ),因为 Maven 插件版本若未显式声明,会继承 Spring Boot BOM 中的插件管理版本,而高版本 BOM 可能仍引入不兼容插件; - 执行 mvn -v 确认 Maven 使用的 JDK 确实为 JDK 8(如 Java version: 1.8.0_121),同时检查 JAVA_HOME 和 MAVEN_OPTS 中无意外指向高版本 JDK;
- 若需长期维护 JDK 8 项目,建议统一使用 Spring Boot 2.1.x 或 2.2.x(后者最低要求 JDK 8u60,仍兼容),避免升级到 2.3+(已要求 JDK 8u202+)及更高主版本。
总结:该问题本质是构建工具链的“插件运行时兼容性”问题,而非代码编译问题。通过精准约束 spring-boot-maven-plugin 版本至 JDK 8 友好版本,即可彻底规避字节码版本冲突,确保 CI/CD 流程在传统 JDK 8 环境中稳定运行。










