2016-07-12 48 views
0

我试图在非标准的多项目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,根据我的建立日志)?

回答

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"))