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

Gradle多模块项目中如何创建带参数的可复用Jacoco任务?

Gradle多模块项目中为指定子项目配置参数化Jacoco覆盖率任务

实现方案

通过在根项目封装可复用的Jacoco配置逻辑,仅在目标子项目中引入并传入自定义参数,既避免全局应用,又支持每个子项目独立设置覆盖率阈值。

1. 根项目封装通用Jacoco配置函数

在根目录的build.gradle.kts中定义一个可复用的函数,包含Jacoco的基础配置,并接收覆盖率最小值作为参数:

// 根项目 build.gradle.kts
fun Project.configureJacocoCoverage(minCoverage: Double) {
    // 应用Jacoco插件
    plugins.apply("jacoco")

    // 配置Test任务关联Jacoco
    tasks.withType<Test> {
        jacoco.includeNoLocationClasses = true
        jacoco.excludes = listOf("jdk.internal.*")
    }

    // 配置覆盖率验证规则
    tasks.jacocoTestCoverageVerification {
        violationRules {
            rule {
                limit {
                    minimum = minCoverage.toBigDecimal()
                }
            }
        }

        // 可选:排除不需要统计的类(如启动类、配置类)
        afterEvaluate {
            classDirectories.setFrom(files(classDirectories.files.map {
                fileTree(it) {
                    exclude("**/*Application.class", "**/*Configuration.class")
                }
            }))
        }
    }

    // 创建组合任务:先执行测试,再验证覆盖率
    val checkCoverage by tasks.registering {
        dependsOn(tasks.test, tasks.jacocoTestCoverageVerification)
        group = "verification"
        description = "执行测试并验证覆盖率达标"
    }
}

2. 目标子项目引入并自定义参数

分别在child2、child3、child4的build.gradle.kts中调用上述函数,传入各自的覆盖率最小值:

child2/build.gradle.kts

// 要求80%的覆盖率
configureJacocoCoverage(0.8)

child3/build.gradle.kts

// 要求75%的覆盖率
configureJacocoCoverage(0.75)

child4/build.gradle.kts

// 要求90%的覆盖率
configureJacocoCoverage(0.9)

3. 任务运行方式

  • 单独验证某个子项目:./gradlew child2:checkCoverage
  • 批量验证所有目标子项目:./gradlew child2:checkCoverage child3:checkCoverage child4:checkCoverage
  • 可选:在根项目创建聚合任务,一键运行所有验证
    在根项目build.gradle.kts中添加:
val checkAllCoverage by tasks.registering {
    dependsOn(":child2:checkCoverage", ":child3:checkCoverage", ":child4:checkCoverage")
    group = "verification"
    description = "批量验证所有目标子项目的覆盖率"
}

运行命令:./gradlew checkAllCoverage

注意事项

  • 确保目标子项目已应用Java/Kotlin插件(如java或org.jetbrains.kotlin.jvm),否则Test任务无法生成Jacoco数据。
  • 可根据需求扩展configureJacocoCoverage函数,增加更多参数(如自定义排除类列表、多规则验证等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:23:21