jacoco是一个开源的,目前使用比较普遍的java语言的覆盖率计算工具,它默认生成的是.exec格式的覆盖率报告。sonarqube是做代码静态扫描的平台,它可以将jacoco计算的覆盖率上传到自己的平台上,然后根据指定的规则来做一些分析。sonarqube最新的8.x的版本开始不支持.exec这种格式的报告了(也就是参数sonar.jacoco.reportPaths是不支持的了),jacoco要生成xml格式的报告才能被sonarqube识别(sonar.coverage.jacoco.reportXmlPaths)。
官方文档的说明,https://docs.sonarqube.org/pages/viewpage.action?pageId=1442166 但文档并没有说具体从哪个版本不支持。
一、首先来看如何适应sonarqube的改动
下面来看如何让jacoco生成xml格式的报告,其实很简单,在build.gradle中添加这样一个设置就好了,打开xml格式,关闭csv和html格式。
jacocoTestReport {
reports {
xml.enabled true
csv.enabled false
html.enabled false
}
}
然后在执行的时候把这个task添加到参数里才可以
./graldew jacocoTestReport
如果将报告上传到sonarqube,除了要在gradle脚本里添加jacoco插件还要添加sonarqube的gradle插件,完整的gradle如下(也欢迎到我参与的开源项目中去看全部的代码https://github.com/vmware/singleton/blob/g11n-java-client/build.gradle):
apply plugin: 'java'
apply plugin: "jacoco"
apply plugin: "org.sonarqube"
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath("org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.7.1")
...
}
}
...
...
...
...
jacocoTestReport {
reports {
xml.enabled true
csv.enabled false
html.enabled false
}
}
二、多项目的gradle构建
在多项目的构建中,如果要计算某一些子项目的覆盖率,那么可以在子项目的gradle中都添加jacoco插件并配置jacocoTestReport任务,但是这需要修改很多个gradle脚本,以后再有更改时也比较繁琐。可以采用下面的方法,只在子项目的gradle脚本中添加jacoco插件,jacocoTestReport则在根项目的gradle中添加,如下,要有一个判断,只在添加了jacoco插件的项目中配置jacocoTestReport:
allprojects {
...
...
afterEvaluate {
if (pluginManager.hasPlugin('jacoco')) {
jacocoTestReport {
reports {
xml.enabled true
csv.enabled false
html.enabled false
}
}
}
}
}
最后在执行gradle的时候还可以通过参数sonar.coverage.exclusions来排除不需要计算覆盖率的代码,如下:
./gradlew jacocoTestReport sonarqube --stacktrace -Dsonar.login=$SONAR_TOKEN -Dsonar.host.url=https://sonarcloud.io -Dsonar.organization=$SONAR_ORG -Dsonar.projectKey=$PROJECT_KEY -Dsonar.projectName=$PROJECT_NAME -Dsonar.branch.name=master -Dsonar.coverage.exclusions=modules/**,tools/tool-trans-fetcher/src/**,vip-common/src/main/java/com/vmware/vip/common/**,vip-manager-l10n-agent/src/** --info
来源:CSDN
作者:苏尼特是羊肉
链接:https://blog.csdn.net/surite/article/details/104693357