如何配置sonar-maven-plugin分析Java21项目并解决FindBugs报错?
解决Java 21项目中sonar-maven-plugin分析的FindBugs兼容性问题
问题根源
你遇到的Unsupported class file major version 65错误,是因为旧版本的sonar-maven-plugin(3.10.0.2594)依赖的FindBugs组件不支持Java 21的类文件版本(major version 65对应Java 21)。同时Java 21的API变更(比如MethodHandles$Lookup的内部实现调整)也导致FindBugs无法正常解析类文件。
解决方案
1. 升级sonar-maven-plugin到支持Java 21的版本
旧版本3.10.0.2594发布于2022年,未适配Java 21。需要升级到4.0.0.2929及以上版本,这些版本的插件已兼容Java 21的类格式和API。
2. 替换FindBugs为SpotBugs
FindBugs已停止维护,最高仅支持Java 17。SpotBugs是FindBugs的官方继任项目,持续更新并支持Java 21。需要在Sonar分析中禁用FindBugs,启用SpotBugs。
3. 修改后的POM配置示例
<project...> <properties> <java.version>21</java.version> <!-- 禁用FindBugs,启用SpotBugs --> <sonar.findbugs.enabled>false</sonar.findbugs.enabled> <sonar.spotbugs.enabled>true</sonar.spotbugs.enabled> </properties> <build> <pluginManagement> <plugins> <plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <!-- 升级到兼容Java21的版本 --> <version>4.1.0.3168</version> </plugin> </plugins> </pluginManagement> </build> </project>
额外注意事项
- 确保构建服务器上的SonarQube服务器版本不低于9.9 LTS,旧版本SonarQube无法处理Java 21的代码分析请求。
- 执行分析命令时,无需额外修改Maven版本(你当前用的3.9.4已支持Java 21),直接运行:
mvn sonar:sonar
内容的提问来源于stack exchange,提问作者matsev
相关产品推荐
相关产品推荐

