我正在尝试从jacoco覆盖率报告中排除一些生成的类。 groovy可以正常工作,但转换为Kotlin后无法正常工作

tasks.withType<JacocoCoverageVerification> {
afterEvaluate {
     files(classDirectories.files.forEach() {
        fileTree(it).apply {
            exclude("com/generate/**")
        }
    })
}
violationRules {
    rule {
        limit {
            minimum = BigDecimal(0.30)
        }

    }

}

}
tasks.getByName("check")
.dependsOn(tasks.getByName("jacocoTestCoverageVerification"))

但是违规规则运行良好。

最佳答案

这是对jacoco pluginkotlin的限制。由于classDirectories不是最终的,所以我们不能采用旧的方式。我们需要使用classDirectories.setFrom方法来设置值。

tasks.withType<JacocoCoverageVerification> {
    violationRules {
        rule {
            limit {
                minimum = BigDecimal(0.62)
            }
        }
    }

    afterEvaluate {
        classDirectories.setFrom(files(classDirectories.files.map {
            fileTree(it).apply {
                exclude("com/generate/**")
            }
        }))
    }
}

tasks.withType<JacocoReport> {
    afterEvaluate {
        classDirectories.setFrom(files(classDirectories.files.map {
            fileTree(it).apply {
                exclude("com/generate/**")
            }
        }))
    }
}

07-24 19:55