Android项目:Kover排除代码后SonarQube仍统计覆盖率的问题求助
解决方案:让Kover生成Jacoco格式报告同步给SonarQube
你的问题核心在于Kover默认生成的报告格式,SonarQube无法解析其中的代码排除规则。通过让Kover输出Jacoco标准格式的覆盖率报告,就能让SonarQube正确识别被注解排除的代码块,无需移动预览文件或用无效的块忽略配置。
步骤1:配置Kover生成Jacoco XML报告
修改项目的Gradle配置,保留原有的注解排除规则,同时让Kover输出Jacoco格式的XML报告:
kover { reports { filters { excludes { annotatedBy("com.example.MyAnnotation") } } // 开启Jacoco格式报告生成 jacoco { xml.set(file("$buildDir/reports/kover/jacoco.xml")) } } }
步骤2:让SonarQube读取Jacoco报告
在SonarQube的配置中(可以是项目根目录的sonar-project.properties,或者Gradle的sonar扩展块),指定Jacoco报告的路径:
// Gradle配置示例 sonar { properties { property("sonar.coverage.jacoco.xmlReportPaths", "$buildDir/reports/kover/jacoco.xml") } }
原理说明
Kover的原生报告格式仅在本地HTML展示时能识别注解排除规则,但SonarQube对Jacoco格式的支持更完善——Jacoco XML报告中会明确标记哪些代码行被排除在覆盖率统计外,SonarQube读取后就能同步排除这些代码的覆盖率计算。
备选临时方案:使用//NOSONAR注释(不推荐)
如果不想修改报告格式,可以在Compose预览函数的行首添加//NOSONAR注释,SonarQube会忽略该行的覆盖率统计。但这个方法需要手动给每个预览函数添加注释,维护成本较高,仅适合临时场景。
内容的提问来源于stack exchange,提问作者Wirling
相关产品推荐
相关产品推荐

