我试图在非标准的多项目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$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,根据我的构建日志)?
答案 0 :(得分:0)
除了我关于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"))