You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多模块Gradle项目Jacoco覆盖率未包含子模块问题求助

解决方案

问题根源

你之前的配置错误在于依赖了common模块的test任务,但所有测试都在app模块中执行,common模块没有运行测试,自然不会生成test.exec。实际上,对common模块代码的覆盖数据已经包含在app模块的test.exec中,只需要在报告中引入common的类和源码即可。

步骤1:全局启用Jacoco插件

在根项目的build.gradle.kts中配置,确保所有模块都应用Jacoco基础配置:

plugins {
    jacoco
    // 保留你项目原有的其他全局插件(如java、application等)
}

subprojects {
    apply(plugin = "jacoco")

    jacoco {
        toolVersion = "0.8.10" // 与Gradle 8.7兼容的稳定版本
    }
}

步骤2:调整app模块的Jacoco报告配置

修改app模块的build.gradle.kts,移除对common模块test任务的依赖,仅引用app的执行数据,并正确关联common的类和源码目录:

tasks.jacocoTestReport {
    val commonProject = project(":common")

    // 仅依赖app自身的test任务,因为所有测试都在这里执行
    dependsOn(tasks.test)
    // 确保common模块的类已编译
    dependsOn(commonProject.tasks.compileJava)

    // 配置需要统计覆盖率的类目录:包含app和common的主类
    classDirectories.setFrom(
        files("$buildDir/classes/java/main"),
        files("${commonProject.buildDir}/classes/java/main")
        // 如果使用Kotlin,替换为:files("$buildDir/classes/kotlin/main")
    )

    // 配置源码目录:包含app和common的主源码
    sourceDirectories.setFrom(
        files("${projectDir}/src/main/java"),
        files("${commonProject.projectDir}/src/main/java")
        // Kotlin项目替换为:files("${projectDir}/src/main/kotlin")
    )

    // 执行数据仅需app的test.exec,因为所有测试的覆盖数据都在这里
    executionData.setFrom(files("$buildDir/jacoco/test.exec"))

    reports {
        xml.required.set(true)
        html.required.set(true)
        csv.required.set(false)
    }
}

// 可选:配置测试任务执行完成后自动生成报告
tasks.test {
    finalizedBy(tasks.jacocoTestReport)
    jacoco {
        enabled = true // 确保Jacoco在测试时收集数据
    }
}

步骤3:生成并查看报告

执行以下命令生成覆盖率报告:

./gradlew app:test app:jacocoTestReport

报告生成后,打开app/build/reports/jacoco/test/html/index.html即可查看包含common模块的完整覆盖率数据。

关键注意事项

  • 如果你使用Kotlin编写代码,需要将类目录和源码目录中的java替换为kotlin。
  • 确保common模块已正确编译,否则报告无法找到其类文件。
  • Jacoco版本需与Gradle版本兼容,Gradle 8.x推荐使用0.8.10及以上版本。

内容的提问来源于stack exchange,提问作者dragogian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:12:45