Gradle JacocoReport任务触发令人困惑的异常

时间:2016-07-12 12:00:03

标签: gradle jacoco

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

1 个答案:

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