Gradle JacocoReport 任务触发令人困惑的异常
Gradle JacocoReport task triggers confusing Exception
我正在尝试在非标准多项目 gradle 设置中生成合并的 Jacoco 测试覆盖率报告。在下面的 gradle 代码中有 2 个任务。第一个,jacocoMerge,现在可以工作(经过多次努力),在正确的位置生成 combined.exec 文件。第二个任务,jacocoMergedReport,根据日志跟踪,似乎执行没有错误,但什么也没做,执行后不久跟踪中出现空指针异常。
这是 gradle 片段:
afterEvaluate {
task jacocoMerge(type: JacocoMerge) {
executionData testTasks
destinationFile = file("$buildDir/../reports/combined.exec")
executionData = files(executionData.findAll({ it.exists() }))
jacocoClasspath = cp
}
task jacocoMergedReport(type: org.gradle.testing.jacoco.tasks.JacocoReport, dependsOn: 'jacocoMerge') {
jacocoClasspath = cp
executionData = files("$buildDir/../reports/combined.exec")
sourceDirectories = files(subprojects.findAll { isActualProject(it) }.sourceSets.main.allSource.srcDirs).filter({it.exists()})
classDirectories = files(subprojects.findAll { isActualProject(it) }.sourceSets.main.output).filter({it.exists()})
reports {
html.enabled = true
xml.enabled = true
csv.enabled = true
}
executionData.each {println it}
}
}
我已经使用 println
语句验证了输入和 gradle 版本(2.14 - 运行 来自通过 Eclipse 启动的包装器),这一切对我来说都很好。
但它显然除了空指针异常之外什么也没有生成:
java.lang.NullPointerException at org.gradle.api.internal.project.taskfactory.OutputDirectoryPropertyAnnotationHandler.validate(OutputDirectoryPropertyAnnotationHandler.java:49)
有关错误之前的 jacocoMergedReport 任务的完整堆栈跟踪和令人鼓舞的生命周期消息可用 in this pastebin file。
我看了gradle的source code on github for this class, but oddly the line number and method name seem to correspond to an earlier version比2.14.
那么是什么导致了这个错误,其次,为什么 gradle 告诉我它的版本是 2.14,但堆栈跟踪似乎与早期版本的代码相对应,而不是最后提交的代码在 2.14 构建时间之前(2016-06-14 07:16:37 UTC,根据我的构建日志)?
我已经解决了这个问题,除了我对 gradle 版本的问题。出于某种原因,报告目标目录没有设置默认值,所以我可以通过如下调整报告来让它工作:
reports {
html.enabled = true
xml.enabled = true
csv.enabled = true
}
getReports().getXml().setDestination(file("$buildDir/../reports/jacoco/merged.xml"))
getReports().getCsv().setDestination(file("$buildDir/../reports/jacoco/merged.csv"))
getReports().getHtml().setDestination(file("$buildDir/../reports/jacoco/html"))
我正在尝试在非标准多项目 gradle 设置中生成合并的 Jacoco 测试覆盖率报告。在下面的 gradle 代码中有 2 个任务。第一个,jacocoMerge,现在可以工作(经过多次努力),在正确的位置生成 combined.exec 文件。第二个任务,jacocoMergedReport,根据日志跟踪,似乎执行没有错误,但什么也没做,执行后不久跟踪中出现空指针异常。
这是 gradle 片段:
afterEvaluate {
task jacocoMerge(type: JacocoMerge) {
executionData testTasks
destinationFile = file("$buildDir/../reports/combined.exec")
executionData = files(executionData.findAll({ it.exists() }))
jacocoClasspath = cp
}
task jacocoMergedReport(type: org.gradle.testing.jacoco.tasks.JacocoReport, dependsOn: 'jacocoMerge') {
jacocoClasspath = cp
executionData = files("$buildDir/../reports/combined.exec")
sourceDirectories = files(subprojects.findAll { isActualProject(it) }.sourceSets.main.allSource.srcDirs).filter({it.exists()})
classDirectories = files(subprojects.findAll { isActualProject(it) }.sourceSets.main.output).filter({it.exists()})
reports {
html.enabled = true
xml.enabled = true
csv.enabled = true
}
executionData.each {println it}
}
}
我已经使用 println
语句验证了输入和 gradle 版本(2.14 - 运行 来自通过 Eclipse 启动的包装器),这一切对我来说都很好。
但它显然除了空指针异常之外什么也没有生成:
java.lang.NullPointerException at org.gradle.api.internal.project.taskfactory.OutputDirectoryPropertyAnnotationHandler.validate(OutputDirectoryPropertyAnnotationHandler.java:49)
有关错误之前的 jacocoMergedReport 任务的完整堆栈跟踪和令人鼓舞的生命周期消息可用 in this pastebin file。
我看了gradle的source code on github for this class, but oddly the line number and method name seem to correspond to an earlier version比2.14.
那么是什么导致了这个错误,其次,为什么 gradle 告诉我它的版本是 2.14,但堆栈跟踪似乎与早期版本的代码相对应,而不是最后提交的代码在 2.14 构建时间之前(2016-06-14 07:16:37 UTC,根据我的构建日志)?
我已经解决了这个问题,除了我对 gradle 版本的问题。出于某种原因,报告目标目录没有设置默认值,所以我可以通过如下调整报告来让它工作:
reports {
html.enabled = true
xml.enabled = true
csv.enabled = true
}
getReports().getXml().setDestination(file("$buildDir/../reports/jacoco/merged.xml"))
getReports().getCsv().setDestination(file("$buildDir/../reports/jacoco/merged.csv"))
getReports().getHtml().setDestination(file("$buildDir/../reports/jacoco/html"))