如何为多模块项目创建聚合的 Jacoco 报告?

nuh*_*oca 8 android gradle multi-module jacoco sonarqube

几天来我一直在寻找一种解决方案,用于合并Jacoco多模块 Android 项目的多个报告,以便Sonarcloud立即将它们发送出去。我已经检查了大量的 Stackoverflow 帖子和其他内容,例如博客、Github 存储库、Gradle 论坛等,但不幸的是没有一个解决方案适合我。

如果这里有人与我分享示例项目或代码片段,我将非常感激。

Gradle version: 7.0.2
Kotlin version: 1.5.21
JDK: 11
Run Code Online (Sandbox Code Playgroud)

下面的代码片段也不适合我

/**
 *  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() })
    }
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*iuk 2

这里的工作示例如何创建聚合的 jacoco 报告: https://github.com/SurpSG/jacoco-gradle-plugin-merge-coverage

task jacocoRootReport(type: JacocoReport, group: 'Coverage reports') {
    description = 'Generates an aggregate report from all subprojects'
    dependsOn(subprojects.test)

    additionalSourceDirs.from = files(subprojects.sourceSets.main.allSource.srcDirs)
    sourceDirectories.from = files(subprojects.sourceSets.main.allSource.srcDirs)
    classDirectories.from = files(subprojects.sourceSets.main.output)
    executionData.from = files(subprojects.jacocoTestReport.executionData)

    reports {
        html.enabled true
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的回答,但这对我不起作用。我收到以下错误:“无法获取 org.gradle.api.Project 类型的项目 ':app' 的未知属性 'test'。” (2认同)