如何在Kotlin中构建jacoco测试报告任务(Gradle 5)
How to build jacoco test report task in Kotlin (Gradle 5)
我有这个 Groovy 脚本,我想将其转换为 Kotlin (build.gradle.kts
)。有人可以帮助我或给我指点吗?
Groovy(有效):
task jacocoTestReport(type: JacocoReport) {
group = "Reporting"
description = "Generate Jacoco coverage reports"
reports {
xml.enabled = true
html.enabled = false
csv.enabled = false
}
def fileFilter = ['**/BuildConfig.class', 'src/main/gen/**/*', 'src/main/assets/**/*',]
def debugTree = fileTree(dir: "${buildDir}/intermediates/javac/debug/classes", excludes: fileFilter)
def mainSrc = "${project.projectDir}/src/main"
sourceDirectories = files([mainSrc])
classDirectories = files([debugTree])
executionData = fileTree(dir: project.projectDir, includes: ['**/**/*.exec', '**/**/*.ec'])
}
Kotlin(我失败的尝试,不起作用):
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)
}
更新: 这可能有效。没有创建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"))
}
)
}
我有这个 Groovy 脚本,我想将其转换为 Kotlin (build.gradle.kts
)。有人可以帮助我或给我指点吗?
Groovy(有效):
task jacocoTestReport(type: JacocoReport) {
group = "Reporting"
description = "Generate Jacoco coverage reports"
reports {
xml.enabled = true
html.enabled = false
csv.enabled = false
}
def fileFilter = ['**/BuildConfig.class', 'src/main/gen/**/*', 'src/main/assets/**/*',]
def debugTree = fileTree(dir: "${buildDir}/intermediates/javac/debug/classes", excludes: fileFilter)
def mainSrc = "${project.projectDir}/src/main"
sourceDirectories = files([mainSrc])
classDirectories = files([debugTree])
executionData = fileTree(dir: project.projectDir, includes: ['**/**/*.exec', '**/**/*.ec'])
}
Kotlin(我失败的尝试,不起作用):
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)
}
更新: 这可能有效。没有创建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"))
}
)
}