Spring Boot3.1+Java17启动报错:Unsupported class file major version61
问题分析与解决方案
核心原因
java.lang.IllegalArgumentException: Unsupported class file major version 61 本质是有组件无法识别Java 17编译的类文件(版本号61对应Java 17)。你手动将Spring Framework降级到6.0.9,但Spring Boot 3.1.0默认依赖的是Spring Framework 6.0.11,版本不匹配导致依赖链中存在未适配Java 17的组件——即便手动升级ASM到9.5,也可能被Spring旧版本的依赖覆盖,无法生效。
具体解决步骤
1. 优先移除Spring版本的显式降级配置
Spring Boot的依赖管理已经完成了版本适配,直接删除build.gradle中手动指定Spring版本的代码,让Spring Boot自动管理所有依赖版本:
// 删除类似以下的配置 ext['spring.version'] = '6.0.9' // 或dependencyManagement块中关于Spring Framework的版本指定
2. 若必须保留Spring 6.0.9,强制统一ASM版本
如果业务要求必须使用Spring 6.0.9,需确保整个依赖树中的ASM版本统一为9.5,在build.gradle中添加强制依赖规则:
configurations.all { resolutionStrategy.force 'org.ow2.asm:asm:9.5' resolutionStrategy.force 'org.ow2.asm:asm-commons:9.5' resolutionStrategy.force 'org.ow2.asm:asm-tree:9.5' // 根据实际依赖情况,补充其他ASM相关模块(如asm-analysis、asm-util等) }
3. 检查依赖树定位冲突组件
执行Gradle命令生成依赖树,排查是否存在未适配Java 17的组件:
./gradlew dependencies --configuration runtimeClasspath
搜索asm关键词,确认是否有模块仍在使用低于9.5的ASM版本,针对性进行排除或升级。
4. 确保编译与运行环境一致
验证build.gradle中Java版本配置,保证编译和运行都使用Java 17:
java { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } tasks.withType(JavaExec) { javaLauncher = javaToolchains.launcherFor { languageVersion = JavaLanguageVersion.of(17) } }
内容的提问来源于stack exchange,提问作者Eljah
相关产品推荐
相关产品推荐

