SonarQube配置问题汇总
问题1:SonarScanner配置文件无法配置多个项目
解决方案:
SonarScanner默认读取的是/usr/local/sonar-scanner/conf/sonar-scanner.properties
,如果同时支持多个项目,需要添加多个以.properties
结尾的配置项。并在执行时制定配置文件:
配置多个以.properties结尾的配置项
[root@localhost conf]# tree
.
├── duoqi_riskcontrol.properties
├── duoqi_trade.properties
└── sonar-scanner.properties
0 directories, 3 files
#指定sonarscanner执行的配置文件
[root@localhost develop]# sonarscanner -Dproject.settings=/usr/local/sonar-scanner/conf/duoqi_riskcontrol.properties
问题2:SonarScanner扫描完成后,单元测试代码覆盖率总是0
根据官方文档,如果要SonarScanner支持静态扫描,则需把Junit执行结果与jacoco(代码覆盖率统计工具)的结果配给SonarScanner,则这个问题引申了3个问题:
问题2.1:JUnit默认不生成测试报告,且JUnit官方文档没有相关配置的描述
解决方案:
通过stackoverflow相似的问题得知,首先需要在配置文件build.gradle
中(本项目用的Gradle,Maven配置方法差不多)加入一段代码:
test {
reports {
junitXml.enabled = true #生成Xml报告
html.enabled = true #生成html报告
}
}
接着在sonar-scanner的配置文件sonar-scanner.properties
中加入JUnit报告的路径,默认在build
目录里:
sonar.junit.reportPaths=/code/build/reports/tests/test
问题2.2:Jacoco的配置
解决方案:
Jacoco是单元测试覆盖率统计工具,对于gradle项目,在build.gradle
配置文件中加入这段配置:
apply plugin: 'jacoco'
jacoco {
toolVersion = "0.8.0"
reportsDir = file("$buildDir/customJacocoReportDir")
}
jacocoTestReport {
reports {
xml.enabled true
csv.enabled true
html.destination file("${buildDir}/jacocoHtml")
}
}
先build一次,会在指定的目录生成jacoco.exec文件:
[root@localhost develop]#gradle clean build
接着在sonar-scanner.properties
加入jacoco报告路径和jacoco.exec的配置:
sonar.core.codeCoveragePlugin=jacoco
sonar.jacoco.reportPaths=/code/build/jacoco/jacocoTest.exec
# 以下属性可选择性加,当然也可以不加
sonar.dynamicAnalysis=reuseReports
sonar.jacoco.reportMissing.force.zero=false
问题2.3:配置好JUnit和Jacoco报告后,仍没有覆盖率统计数据
解决方案:
这里官方文档没有写,如果需要得到单测覆盖率,除了需要JUnit和Jacoco报告外,还需要配置编译好的二进制文件目录,如果找不到这个文件,也会报错,在sonar-scanner的配置文件加入如下配置:
sonar.java.binaries=/code/build/classes/java
全部配置好后,重新build一次:
[root@localhost develop]#gradle clean build
再指定配置文件执行sonar-scanner:
usr/local/sonar-scanner/conf/duoqi_riskcontrol.properties
则就可以执行单测并看到代码覆盖率了。