如何在SonarQube 9.9.4中禁用FindBugs扫描或修复Java 21引发的Unsupported Class File Major Version错误
如何在SonarQube 9.9.4中禁用FindBugs扫描或修复Java 21引发的Unsupported Class File Major Version错误
遇到这个问题很正常,因为SonarQube 9.9.4内置的FindBugs(包括FindSecBugs)版本并未适配Java 21的class文件主版本号65。既然你无法升级SonarQube,这里有两个可行的解决方向:
一、直接禁用FindBugs扫描
如果你可以接受暂时放弃FindBugs提供的代码缺陷检测,最快的解决方式就是禁用这个传感器,有三种实现途径:
1. 在Azure Pipeline的Maven任务中添加参数
修改你现有Maven任务的options字段,加入-Dsonar.findbugs.enabled=false参数,修改后的配置如下:
- task: Maven@4 condition: succeeded() displayName: Build inputs: mavenPomFile: pom.xml mavenOptions: ${{ parameters.mavenOptions }} javaHomeOption: JDKVersion jdkVersionOption: ${{ parameters.jdkVersionOption }} jdkArchitectureOption: x64 options: '-U --no-transfer-progress -Dsonar.java.binaries=$(System.DefaultWorkingDirectory)/**/classes -Dsonar.findbugs.enabled=false' goals: clean install sonarQubeRunAnalysis: true
这样在构建时会直接跳过FindBugs的扫描环节,避免版本兼容错误。
2. 在项目pom.xml中配置Sonar属性
在项目的pom.xml的<properties>节点中添加禁用FindBugs的全局配置:
<properties> <!-- 其他属性 --> <sonar.findbugs.enabled>false</sonar.findbugs.enabled> </properties>
这种方式会作用于所有使用该pom的构建场景,不需要每次修改Pipeline配置。
3. 在SonarQube项目设置中禁用
进入你的SonarQube项目后台,依次点击Administration > General Settings > FindBugs,找到"Enable FindBugs"的开关并关闭。这是项目级的全局设置,适合需要长期禁用的场景。
二、升级FindBugs/FindSecBugs插件版本(推荐)
如果你不想失去FindBugs的检测能力,可以尝试升级SonarQube中的FindBugs插件到支持Java 21的兼容版本(需确保插件适配SonarQube 9.9.4):
- 登录你的SonarQube后台,进入
Administration > Marketplace,搜索"FindBugs"插件,查看当前安装的版本。 - 查找支持Java 21且兼容SonarQube 9.x的最新插件版本(比如FindBugs插件v4.8.0及以上版本通常已支持Java 21)。
- 下载对应的插件jar包,上传到SonarQube服务器的
extensions/plugins目录,替换旧版本的插件文件。 - 重启SonarQube服务,之后重新触发Azure Pipeline构建,FindBugs应该就能正常扫描Java 21编译的class文件了。
注意:在升级插件前,一定要确认插件版本与SonarQube 9.9.4的兼容性,避免出现其他适配问题。
备注:内容来源于stack exchange,提问作者Splioo
相关产品推荐
相关产品推荐

