我试图在非标准的多项目gradle设置中生成合并的Jacoco测试覆盖率报告。在下面的gradle代码中有2个任务。第一个,jacocoMerge,现在工作(经过很多努力之后),在正确的位置生成combined.exec文件。第二个任务,jacocoMergedReport似乎根据日志跟踪没有错误地执行,但什么都不做,并且在跟踪执行后不久就有一个空指针异常。Gradle JacocoReport任务触发混淆异常
这里的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}
}
}
我已经验证输入和gradle这个版本(2.14 - 从通过Eclipse推出的包装上运行)与println
报表,而这一切对我来说很好。
但它会产生什么之外,显然,空指针异常:
java.lang.NullPointerException at org.gradle.api.internal.project.taskfactory.OutputDirectoryPropertyAnnotationHandler$1.validate(OutputDirectoryPropertyAnnotationHandler.java:49)
完整的堆栈跟踪和关于jacocoMergedReport任务令人鼓舞的生命周期信息,这在之前的错误都可以in this pastebin file。
我看着source code on github for this class,但奇怪的行号和方法名似乎对应于gradle的an earlier version比2.14。
那么是什么原因导致了这个错误,其次,为什么Gradle告诉我它的版本是2.14,但堆栈跟踪似乎与早期版本的代码相对应,而不是与2.14编译时间之前最后一次提交的代码相对应(2016-06-14 07:16:37 UTC,根据我的建立日志)?