SpringBoot+Gradle+Bitbucket Pipelines配置SonarCloud覆盖率始终为0%
解决SonarCloud显示0%代码覆盖率的配置遗漏项
核心问题
你仅添加了SonarQube插件,但未配置测试覆盖率报告生成工具——SonarCloud本身不生成覆盖率数据,必须依赖Jacoco这类工具生成报告后,再将数据提交给Sonar进行解析展示。
具体修复步骤
1. 在build.gradle中补充Jacoco插件及关联配置
plugins { id 'org.springframework.boot' version '你的SpringBoot版本' id 'io.spring.dependency-management' version '对应版本' id 'java' id "org.sonarqube" version "3.4.0.2513" id 'jacoco' // 引入Jacoco覆盖率插件 } // 配置Jacoco版本 jacoco { toolVersion = "0.8.8" // 使用稳定兼容版本 } // 测试任务完成后自动生成覆盖率报告 test { finalizedBy jacocoTestReport } // 配置Jacoco生成Sonar可读的XML格式报告 jacocoTestReport { reports { xml.required = true // 必须开启XML报告,SonarCloud依赖此文件 html.required = true // 可选,生成HTML报告方便本地查看覆盖率详情 } } // 让SonarQube读取Jacoco生成的报告 sonarqube { properties { property 'sonar.java.coveragePlugin', 'jacoco' property 'sonar.jacoco.reportPaths', "${project.buildDir}/reports/jacoco/test/jacocoTestReport.xml" // 补充SonarCloud必填配置(从SonarCloud后台获取) property 'sonar.projectKey', '你的项目Key' property 'sonar.organization', '你的组织Key' property 'sonar.host.url', 'https://sonarcloud.io' } }
2. 调整Bitbucket Pipelines脚本
确保流水线先完成测试并生成覆盖率报告,再执行Sonar分析(显式指定任务更稳妥):
script: - ./gradlew clean build jacocoTestReport sonarqube
3. 验证关键细节
- 测试类需遵循Gradle默认命名规则(如
*Test.java),确保Gradle能识别并执行测试 - Bitbucket Pipelines需配置环境变量
SONAR_TOKEN(从SonarCloud后台生成),Sonar插件会自动读取该变量完成认证 - 确认Jacoco报告路径与Sonar配置中的路径完全一致,避免路径错误导致Sonar无法读取报告
多模块项目额外提示
若为多模块SpringBoot项目,需在根build.gradle中配置Jacoco全局规则,并确保每个子模块都应用Jacoco插件;Sonar配置中需添加所有子模块的Jacoco报告路径,格式示例:
property 'sonar.jacoco.reportPaths', "${project.rootDir}/module1/build/reports/jacoco/test/jacocoTestReport.xml,${project.rootDir}/module2/build/reports/jacoco/test/jacocoTestReport.xml"
内容的提问来源于stack exchange,提问作者Guilherme Feulo do Espirito Sa
相关产品推荐
相关产品推荐

