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

SonarQube排除规则不生效仍扫描Gradle缓存目录问题咨询

问题原因
  • SonarQube Gradle插件3.3版本与Gradle 7.x存在适配缺陷:插件会自动将Gradle Kotlin DSL生成的访问器源码目录追加到扫描源列表,该逻辑优先级高于你手动配置的sonar.sources,导致.gradle目录下的非业务代码被纳入扫描范围。
  • 排除规则生效层级问题:如果你仅在Sonar服务端配置了**/.gradle/**排除规则,未在本地Gradle脚本或CI执行参数中同步配置,插件自动探测的源会跳过服务端规则匹配,直接纳入扫描。
  • 路径匹配规则校验问题:你配置的**/build/**规则不会影响.gradle目录的匹配,属于正常逻辑,但插件自动追加的源不会被全局排除规则覆盖是版本bug导致的异常。
排查解决步骤

步骤1:禁用插件自动源探测功能

在项目的build.gradle或build.gradle.kts中添加以下配置,强制插件仅使用你指定的源码目录,不自动追加其他探测到的源:

// Groovy格式build.gradle配置
sonar {
    properties {
        property "sonar.sources", [
            "build/generated/wsdl",
            "build/generated-sources/xjc",
            "src/main/kotlin"
        ]
        // 禁用编译阶段自动探测源的逻辑
        property "sonar.gradle.skipCompile", "true"
        property "sonar.java.binaries", "build/classes/java/main"
        property "sonar.kotlin.binaries", "build/classes/kotlin/main"
    }
}
// Kotlin格式build.gradle.kts配置
sonar {
    properties {
        property("sonar.sources", listOf(
            "build/generated/wsdl",
            "build/generated-sources/xjc",
            "src/main/kotlin"
        ))
        property("sonar.gradle.skipCompile", "true")
        property("sonar.java.binaries", "build/classes/java/main")
        property("sonar.kotlin.binaries", "build/classes/kotlin/main")
    }
}

步骤2:本地显式配置排除规则

将排除规则直接配置在Gradle脚本或CI执行命令中,确保优先级高于服务端配置:

// 追加到sonar.properties配置块内
property "sonar.exclusions", "**/build/**,**/.gradle/**,**/gradle/wrapper/**"
property "sonar.coverage.exclusions", "**/configuration/**,**/const/**"

步骤3:验证扫描源列表

执行扫描命令时添加-Dsonar.verbose=true参数,在输出日志中搜索Loading sources for module关键字,确认实际纳入扫描的目录是否符合预期。

步骤4:版本适配升级(可选)

如果上述配置仍未生效,可将SonarQube Gradle插件升级到3.5及以上版本,该版本已修复Gradle 7.x系列自动追加Kotlin DSL源目录的bug。

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:57:01