我正试图从jacoco覆盖范围中排除整个包裹,但它无法正常工作 我已按照此回答Filter JaCoCo coverage reports with Gradle中的说明进行操作,但似乎它对我不起作用。 这是代码:
jacocoTestReport {
reports {
xml.enabled false
csv.enabled false
html.destination "${buildDir}/jacocoHtml"
}
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it,
exclude: ['it.unibo.distributedBLS.main/**'])
})
}
}
我也尝试过类似排除+ =,写作
的变体'**/it.unibo.distributedBLS.main/**'
并添加
test {
jacoco {
excludes += ['it.unibo.distributedBLS.main/**',
}
}
但仍然无法正常工作 有一点我不清楚它是什么“dir:it”代表:我应该把它放在那里?可能是错误吗?
答案 0 :(得分:2)
如果您收到以下错误
Cannot set the value of read-only property 'classDirectories' for task ':jacocoTestReport' of type org.gradle.testing.jacoco.tasks.JacocoReport.
使用这个
classDirectories.setFrom(
fileTree(dir: "build/classes/java/main")
.filter({file -> !file.path.contains('/dir1')})
.filter({file -> !file.path.contains('/dir2')})
.filter({file -> !file.path.contains('/dir3')})
)
答案 1 :(得分:0)
这对我有用(至少对于html而不是xml报告)。我偶然发现它,同时做了一些小调整并重新运行我的构建。它现在有道理但不太直观。
请注意我在test.jacoco
中定义我的包的方式与从jacocoTestReport.afterEvaluate
test {
finalizedBy jacocoTestReport
jacoco {
excludes += ["**/com.mypackage.things/**","**/com.mypackage.entity/**"]
}
}
jacocoTestReport {
reports {
xml.enabled true
csv.enabled false
html.enabled false
xml.destination "${buildDir}/reports/jacoco"
}
afterEvaluate {
classDirectories = files(classDirectories.files.collect {
fileTree(dir: it,
exclude: ['**/com/mypackage/things/**',
'**/com/mypackage/entity/**'])
})
}
}
我为Sonarqube生成XML但我在重新运行时暂时将其切换为HTML,以查看是否删除了包。在某些时候,我注意到com.mypackage.entity
被排除在外,但com.mypackage.things
却没有被排除在外。就在那时,我意识到我已经使用/
在报告中定义了实体包,但是正在使用.
的东西包。
对于测试部分,在报告部分中使用点符号更有意义,因为报告可能是在某种html目录结构中生成的,因此使用斜杠符号是有意义的。不确定如何修复XML。我想某种其他符号???