Java 21下出现Unsupported class file major version 65异常及奇怪现象求助
问题原因与解决方案
核心原因:构建缓存残留的旧环境文件导致ASM版本不兼容
这个报错本质是负责解析类文件的ASM库版本过低,无法识别Java 21对应的类文件主版本号65,但Gradle 8.5本身是支持Java 21的,问题出在构建缓存的残留:
- 当你先用Java 17编译项目时,Gradle会把构建过程中的中间文件、依赖解析结果存入构建缓存。这些缓存内容是基于Java 17环境生成的,其中关联的ASM库版本只支持到Java 17的类版本(61)。
- 切换回Java 21并引入新JAR(比如RDF4J)时,Gradle会尝试复用之前的缓存文件。但新引入的JAR可能是用Java 21编译的(类版本65),或者缓存里的旧ASM逻辑没有更新,导致解析时触发
Unsupported class file major version 65错误。 - 执行
clean操作会彻底删除所有缓存的中间产物和构建文件,之后用Java 21重新构建时,Gradle会加载适配Java 21的ASM版本(Gradle 8.5默认配套的Groovy/ASM已经支持Java 21),自然能正确解析新JAR的类文件,编译恢复正常。
避免重复踩坑的小技巧
- 切换Java版本后,优先执行
./gradlew clean清理缓存,再进行构建操作,避免新旧环境的缓存冲突。 - 调试时可以在
gradle.properties里临时配置org.gradle.caching=false禁用构建缓存,快速排查环境切换类的构建问题(生产环境不建议长期关闭)。
内容的提问来源于stack exchange,提问作者Chuck Han
相关产品推荐
相关产品推荐

