如何在Kotlin(Gradle 5)中构建jacoco测试报告任务

如何在Kotlin(Gradle 5)中构建jacoco测试报告任务,kotlin,build.gradle,Kotlin,Build.gradle,我有一个Groovy脚本,我想将它转换成Kotlin(build.gradle.kts)。谁能帮我一下,或者给我一个指针吗 Groovy(作品): Kotlin(我失败的尝试,无效): 更新:这可能有效。没有创建XML与脚本的内容无关。见公认的答案。但无论如何,公认的答案是更符合逻辑的重写。试试这样的方法: tasks.register("jacocoTestReport", JacocoReport::class) { group = "Reporting" descripti

我有一个Groovy脚本,我想将它转换成Kotlin(
build.gradle.kts
)。谁能帮我一下,或者给我一个指针吗

Groovy(作品):

Kotlin(我失败的尝试,无效):


更新:这可能有效。没有创建XML与脚本的内容无关。见公认的答案。但无论如何,公认的答案是更符合逻辑的重写。

试试这样的方法:

tasks.register("jacocoTestReport", JacocoReport::class) {
    group = "Reporting"
    description = "Generate Jacoco coverage reports"

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

    sourceDirectories.setFrom(files("${project.projectDir}/src/main"))
    classDirectories.setFrom(
            fileTree("${buildDir}/intermediates/javac/debug/classes") {
                setExcludes(setOf("**/BuildConfig.class", "src/main/gen/**/*", "src/main/assets/**/*"))
            }
    )
    executionData.setFrom(
            fileTree(project.projectDir) {
                setIncludes(setOf("**/**/*.exec", "**/**/*.ec"))
            }
    )
}

你的Kotlin尝试有什么问题?有任何特定的异常吗?所以问题是没有创建XML文件。有没有办法使用通配符执行Groovy中相同的逻辑?它似乎可以正确地收集覆盖率。我看到的一个问题是它不尊重旗帜。我已经设置了
xml.isEnabled=true
html.isEnabled=false
,但仍然得到html报告,并且没有xml。语法如何?(
this.reports.csv.setEnabled(false)
)?实际上,当我将代码移动到子模块定义时,我发现它是有效的。因此,问题与任务定义无关。你的例子奏效了@madhead。谢谢
    tasks.register("jacocoTestReport", JacocoReport::class) {
        group = "Reporting"
        description = "Generate Jacoco coverage reports"

        this.reports.csv.setEnabled(false)
        this.reports.html.setEnabled(false)
        this.reports.xml.setEnabled(true)
        val debugTree = fileTree("${buildDir}/intermediates/javac/debug/classes").filter { file ->
            return@filter file.absolutePath.startsWith("src/main/gen/") ||
                    file.absolutePath.startsWith("src/main/assets/") ||
                    file.absoluteFile.endsWith("BuildConfig.class")
        }
        val mainSrc = "${project.projectDir}/src/main"
        sourceDirectories.setFrom(files(mainSrc))
        classDirectories.setFrom(files(debugTree))
        val executionTree = fileTree(project.projectDir).filter { file ->
            return@filter !(file.absoluteFile.endsWith(".exec") || file.absoluteFile.endsWith(".ec"))
        }
        executionData.setFrom(executionTree)
    }
tasks.register("jacocoTestReport", JacocoReport::class) {
    group = "Reporting"
    description = "Generate Jacoco coverage reports"

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

    sourceDirectories.setFrom(files("${project.projectDir}/src/main"))
    classDirectories.setFrom(
            fileTree("${buildDir}/intermediates/javac/debug/classes") {
                setExcludes(setOf("**/BuildConfig.class", "src/main/gen/**/*", "src/main/assets/**/*"))
            }
    )
    executionData.setFrom(
            fileTree(project.projectDir) {
                setIncludes(setOf("**/**/*.exec", "**/**/*.ec"))
            }
    )
}