Mic*_*ler 6 gradle multi-module jacoco sonarqube
我们使用gradle 3.3和jacoco工具verson 0.7.6.201602180812。我们有一个gradle多项目,如下所示:
我们在生成test.exec文件的所有子项目中使用单元测试来测试项目源和jacoco。我们在int-test项目中还有其他集成测试,将jacoco结果添加到int-test项目中的test-exec。我们在父项目上使用sonarqube gradle插件(2.2.1)来收集SonarQube服务器v6.2的所有内容。
可以使用自己的项目中的源代码进行测试,一切运行正常:代码覆盖率在jacoco报告以及SonarQube中进行衡量。 无论是在带有测试的项目的覆盖率报告中,还是在带有类的项目中,都不会仅测量生产项目(单个过程)中源的集成测试(内部测试项目)覆盖率。 可能需要以某种方式组合顶级项目的覆盖率数据-有人知道如何做到吗?最好情况下,SonarQube仍会显示单个模块级别的覆盖范围。编辑
这是一个小测试项目:https : //github.com/MichaelZett/coveragetest
运行
“ build smokeTest sonarqube”会导致:
如注释中所述,您必须首先合并Jacoco执行数据,然后告诉sonarqube使用该数据,而不是使用exec
每个子模块生成的单个文件。
我在此处添加示例,因为接受的答案中提供的链接有些误导。它们中的大多数为您提供了不同的解决方法,以合并Jacoco报告,而不是合并您想要的执行数据。
看起来像这样:
def allTestCoverageFile = "$buildDir/jacoco/allTestCoverage.exec"
sonarqube {
properties {
property "sonar.projectKey", "your.org:YourProject"
property "sonar.projectName", "YourProject"
property "sonar.jacoco.reportPaths", allTestCoverageFile
}
}
task jacocoMergeTest(type: JacocoMerge) {
destinationFile = file(allTestCoverageFile)
executionData = project.fileTree(dir: '.', include:'**/build/jacoco/test.exec')
}
task jacocoMerge(dependsOn: ['jacocoMergeTest']) {
// used to run the other merge tasks
}
subprojects {
sonarqube {
properties {
property "sonar.jacoco.reportPaths", allTestCoverageFile
}
}
}
Run Code Online (Sandbox Code Playgroud)
简而言之:
allTestCoverageFile
)定义一个全局覆盖文件输出。sonar.jacoco.reportPaths
)。但是请注意,我们也必须在子项目结束时执行此操作。这是非常重要的。不要错过JacocoMerge
(来自Jacoco插件的一个孵化类),它将所有项目(executionData
)的所有测试覆盖率报告合并到我们的中allTestCoverageFile
。如果您使用的是SonarQube 6.2之前的版本,请使用sonar.jacoco.reportPath属性
谈到 SonarQube:您可以通过使用jacoco.exec
所有模块的相同位置来获取聚合报告。确保在构建之前删除该文件并将其附加到所有模块中。
只谈 Gradle:看看
归档时间: |
|
查看次数: |
6680 次 |
最近记录: |