【发布时间】:2021-11-28 14:19:25
【问题描述】:
我几天来一直在寻找一种解决方案,用于合并多模块 Android 项目的多个 Jacoco 报告,以便一次将它们发送到 Sonarcloud。我已经检查了大量 Stackoverflow 帖子和其他内容,例如博客、Github 存储库、Gradle forum 等,但不幸的是,没有一个解决方案适合我。
如果有人在这里与我分享示例项目或代码片段,我将不胜感激。
Gradle version: 7.0.2
Kotlin version: 1.5.21
JDK: 11
下面的代码对我也不起作用
/**
* Root task that generates an aggregated Jacoco test coverage report for all sub-projects
*/
task jacocoFullReport(type: JacocoReport, group: 'Coverage reports') {
group = 'Reporting'
description = 'Generates an aggregate report from all subprojects'
tasks.withType(Test) {
ignoreFailures true
}
def projects = subprojects
//noinspection GrUnresolvedAccess
dependsOn(projects.jacocoReport)
final source = files(projects.jacocoReport.sourceDirectories)
additionalSourceDirs.setFrom source
sourceDirectories.setFrom source
classDirectories.setFrom files(projects.jacocoReport.classDirectories)
executionData.setFrom files(projects.jacocoReport.executionData)
reports {
html {
enabled true
destination file('build/reports/jacoco/html')
}
csv {
enabled true
destination file('build/reports/jacoco/jacocoFullReport.csv')
}
}
doFirst {
//noinspection GroovyAssignabilityCheck
executionData.setFrom files(executionData.findAll { it.exists() })
}
}
【问题讨论】:
-
org.sonarqubeGradle 插件遍历所有子项目并推送所有 JaCoCo XML 报告。为什么需要合并它们? -
@agabrys 是的,但我只想提供一个文件。但是你的意思是低于一个应该没问题,对吧?
sonarqube { properties { property "sonar.coverage.jacoco.xmlReportPaths", fileTree(dir: "$projectDir", includes: ["**/reports/jacoco/*/jacocoTestReport.xml"]).files.join(", ") } } -
删除
sonar.coverage.jacoco.xmlReportPaths属性。它的默认值完全符合您的需要。通常,只要您不需要更改默认行为,就不应设置任何 SonarScanner 属性。 -
默认情况下,JaCoCo Gradle 插件在
build/reports/jacoco/<taskName>/jacocoTestReport.xml文件中创建报告。 SonarScanner 默认配置sonar.coverage.jacoco.xmlReportPaths来检查build/reports/jacoco/test/jacocoTestReport.xml。检查您的build.gradle是否不会强制在其他位置创建 Android JaCoCo 报告。如果是 - 然后将其删除并使用默认值。如果没有 - 您可以更改为使用标准位置。 -
谢谢,我强制我的任务在与其他
Kotlin模块相同的位置为Android模块创建报告并删除了该属性。看起来它像以前一样工作。
标签: android gradle sonarqube jacoco multi-module