You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:57:53