Gradle Sonar Scanner与独立Sonar Scanner扫描结果不一致问题咨询
解决SonarQube多语言项目扫描的两个核心问题
我来帮你拆解这两个问题,都是SonarQube多语言扫描中常见的坑,咱们一步步解决:
一、Gradle扫描仅检测Java的问题
SonarQube Gradle插件2.6.1版本(和你的Sonar-scanner 2.6.1匹配)默认只会自动配置Java相关的检测规则和扫描范围,对于JS、PHP这类非JVM语言,得手动在build.gradle里明确告诉插件要扫描这些语言。
你可以在build.gradle的sonarqube任务中添加以下配置:
sonarqube { properties { // 把扫描范围设为项目根目录,覆盖默认仅Java源码的限制 property "sonar.sources", "." // 明确列出所有要检测的语言,别让插件默认只认Java property "sonar.language", "java,js,php" // 如果你的JS/PHP有单独的源码目录,可以精准指定(按需调整) property "sonar.javascript.sources", "src/main/js,webapp/js" property "sonar.php.sources", "src/main/php" } }
小提示:
sonar.sources设为.会扫描项目下所有文件,但如果有无关目录(比如node_modules、build),可以用sonar.exclusions排除,比如property "sonar.exclusions", "node_modules/**,build/**"。- 单独配置每种语言的
sonar.[language].sources能让扫描更高效,避免插件瞎找文件。
另外,检查下你的Gradle项目有没有其他插件(比如Java插件的源码集配置)限制了SonarQube的扫描范围,确保非Java文件没有被意外排除。
二、独立Sonar-scanner无覆盖率显示的问题
独立scanner能扫全语言但看不到覆盖率,核心原因是没告诉SonarQube去哪里读覆盖率报告,或者服务器端的覆盖率插件没配置好。
1. 先确保生成了覆盖率报告
SonarQube本身不会生成覆盖率数据,得先让对应语言的工具生成报告:
- Java用JaCoCo生成
jacocoTestReport.xml - JS用Istanbul生成
lcov.info - PHP用PHPUnit生成
coverage.xml
2. 配置SonarQube读取报告
在你的sonar-project.properties文件(或者执行scanner时用命令行参数)里添加对应语言的覆盖率配置:
# Java覆盖率配置(JaCoCo) sonar.java.coveragePlugin=jacoco sonar.jacoco.reportPaths=build/reports/jacoco/test/jacocoTestReport.xml # JS覆盖率配置(Istanbul) sonar.javascript.coveragePlugin=istanbul sonar.javascript.coverageReportPaths=build/reports/coverage/lcov.info # PHP覆盖率配置(PHPUnit) sonar.php.coveragePlugin=phpunit sonar.php.coverage.reportPaths=build/reports/phpunit/coverage.xml
如果不想用配置文件,执行scanner时直接传参数也行:
sonar-scanner \ -Dsonar.projectKey=你的项目Key \ -Dsonar.sources=. \ -Dsonar.java.coveragePlugin=jacoco \ -Dsonar.jacoco.reportPaths=build/reports/jacoco/test/jacocoTestReport.xml \ -Dsonar.javascript.coverageReportPaths=build/reports/coverage/lcov.info
3. 检查SonarQube服务器设置
登录SonarQube 6.7后台,确认这两点:
- 对应的覆盖率插件(比如JaCoCo、JavaScript Coverage、PHP Coverage)已经安装并启用。
- 项目的质量配置(Quality Profile)里包含了覆盖率相关的规则,没被禁用。
额外提醒
你的SonarQube 6.7版本比较老,部分新的语言插件可能不兼容,要确认所用语言的插件版本适配6.7。另外,Gradle插件和独立scanner的配置是完全独立的,两边的设置不会互相影响哦。
内容的提问来源于stack exchange,提问作者Ksshin
相关产品推荐
相关产品推荐

