Gradle多模块项目仅生成SonarQube Jacoco测试覆盖率报告求助
Gradle多模块项目仅上传Jacoco覆盖率报告、跳过静态代码分析解决方案
核心思路
要实现只生成覆盖率报告、跳过耗时的静态代码分析,关键是让SonarQube保留源码与覆盖率的映射关系,同时关闭所有代码质量检测类的分析任务。
可行配置方案(Gradle插件方式)
在根项目的build.gradle中添加如下配置,替代手动sonar-scanner调用:
plugins { id 'jacoco' id 'org.sonarqube' version '4.4.1.3373' // 使用兼容项目的最新版本 } // 合并多模块Jacoco执行数据 task jacocoMerge(type: JacocoMerge) { executionData fileTree(project.rootDir).include("**/build/jacoco/*.exec") destinationFile = file("$buildDir/jacoco/jacocoMerge.exec") } // 生成合并后的Jacoco XML报告(SonarQube推荐格式) task jacocoReportMerge(type: JacocoReport) { dependsOn jacocoMerge executionData jacocoMerge.destinationFile sourceSets = project.subprojects.collect { it.sourceSets.main } reports { xml.required = true xml.outputLocation = file("$buildDir/reports/jacoco/jacocoReport.xml") } } // SonarQube配置 sonarqube { dependsOn jacocoReportMerge // 确保先生成覆盖率报告 properties { // 基础项目配置 property 'sonar.projectKey', '你的项目Key' property 'sonar.projectName', '你的项目名称' property 'sonar.host.url', '你的SonarQube服务地址' // 保留源码路径,用于覆盖率与代码的映射 property 'sonar.sources', project.subprojects.collect { it.sourceSets.main.java.srcDirs }.flatten().join(',') // 指定编译后的class文件(解决Java项目必须提供binaries的报错) property 'sonar.java.binaries', project.subprojects.collect { "${it.buildDir}/classes/java/main" }.join(',') // 关闭所有静态代码分析任务 property 'sonar.skipDuplication', 'true' // 跳过重复代码检测 property 'sonar.rule.all.disable', 'true' // 禁用所有代码质量规则 property 'sonar.skipDesign', 'true' // 跳过架构设计分析 property 'sonar.issues.mode', 'skip' // 跳过Bug、漏洞等所有问题检测 // 指定合并后的Jacoco覆盖率报告 property 'sonar.coverage.jacoco.xmlReportPaths', "$buildDir/reports/jacoco/jacocoReport.xml" } }
若使用sonar-scanner CLI的修复方案
在项目根目录创建sonar-project.properties,添加以下配置:
sonar.projectKey=你的项目Key sonar.projectName=你的项目名称 sonar.host.url=你的SonarQube服务地址 # 必须保留源码和class路径,否则覆盖率无法映射 sonar.sources=src/main/java sonar.java.binaries=build/classes/java/main # 关闭所有静态代码分析 sonar.skipDuplication=true sonar.rule.all.disable=true sonar.skipDesign=true sonar.issues.mode=skip # 指定Jacoco XML报告路径 sonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/jacocoReport.xml
之前尝试方案失效原因说明
- 设置
sonar.sources为空:SonarQube无法找到源码文件,导致覆盖率数据无法关联到具体代码,最终无有效报告。 - 设置
sonar.exclusions='**':排除了所有文件(包括源码和class文件),覆盖率失去映射基础,自然无法生成有效数据。 - 设置
sonar.issue.ignore.allfiles=true:该属性需要配合具体的规则忽略条目使用,单独设置会因缺少关联规则而报错。
内容的提问来源于stack exchange,提问作者user25527228
相关产品推荐
相关产品推荐

