Java Gradle Jacoco来源包括测试

Java Gradle Jacoco来源包括测试,java,gradle,jacoco,Java,Gradle,Jacoco,我有一个多模块项目和一些TestNG测试,涵盖了它们 我的gradle配置如下所示: subprojects { subproject -> jacocoTestReport { additionalSourceDirs = files(sourceSets.main.allSource.srcDirs) classDirectories = files(sourceSets.main.output) sourceDirectori

我有一个多模块项目和一些TestNG测试,涵盖了它们

我的gradle配置如下所示:

subprojects { subproject ->
    jacocoTestReport {
        additionalSourceDirs = files(sourceSets.main.allSource.srcDirs)
        classDirectories =  files(sourceSets.main.output)
        sourceDirectories = files(sourceSets.main.allSource.srcDirs)

        reports {
            html.enabled = true
            xml.enabled = true
            csv.enabled = false
        }
    }

    test {
        useTestNG()
    }

    test.finalizedBy(project.tasks.jacocoTestReport)
}
在报告中,我希望看到基于main包的源代码(由sourceset.main提供)的代码覆盖率,但是测试包中的所有java类也包括在内。所以覆盖结果是无效的


如何修复配置?

我所有的测试都有一个命名模式,因此我可以通过正则表达式排除它们:

jacocoTestReport {
    additionalSourceDirs = files(sourceSets.main.allSource.srcDirs)
    classDirectories =  files(sourceSets.main.output)
    sourceDirectories = files(sourceSets.main.allSource.srcDirs)

    afterEvaluate {
        classDirectories = files(classDirectories.files.collect {
            fileTree(dir: it, exclude: 'path/to/test/*Test.java')
        })
    }

    reports {
        html.enabled = true
        xml.enabled = true
        csv.enabled = false
    }
}