SonarQube中文网站 > 新手入门 > SonarQube怎么设置文件排除规则 SonarQube排除规则不生效如何检查
教程中心分类
SonarQube怎么设置文件排除规则 SonarQube排除规则不生效如何检查
发布时间:2026/08/19 14:09:07

  SonarQube项目中常会混入生成代码、第三方源码、测试资源和临时文件,但这些内容并不一定都需要参与同一种分析。处理“SonarQube怎么设置文件排除规则,SonarQube排除规则不生效如何检查”时,第一步不是直接写通配符,而是先确定究竟要【完全排除文件】、【排除覆盖率统计】还是【排除重复代码检测】。不同目标对应不同参数,配置位置、路径基准和CI中的覆盖参数也会影响最终结果。

  一、SonarQube怎么设置文件排除规则

 

  SonarQube支持根据文件和目录路径调整分析范围。配置时最好从具体目录开始验证,再逐渐扩大范围,避免一个过宽的规则把正常业务代码也过滤掉。

 

  1、完全排除不需要分析的源码

 

  如果生成代码、第三方代码等内容完全不需要参与问题检测,可以使用【sonar.exclusions】。

 

  ①进入项目的【Project Settings】→【General Settings】→【Analysis Scope】。

 

  ②找到源码文件排除相关设置。

 

  ③填写需要排除的文件或目录匹配模式。

 

  ④例如需要排除所有generated目录,可根据项目实际结构配置【/generated/】。

 

  ⑤保存设置后重新执行一次SonarQube分析。

 

  【sonar.exclusions】用于从源码分析范围中移除匹配文件;测试代码则应使用【sonar.test.exclusions】,两者作用对象不同。

 

  2、根据路径层级正确使用通配符

 

  路径匹配出错,是排除规则无效最常见的原因之一。

 

  ①一个目录层级内的任意字符使用【*】。

 

  ②需要跨越多个目录层级时使用【**】。

 

  ③只匹配一个字符时使用【?】。

 

  ④先用一个确定存在的目录验证规则。

 

  ⑤命中正确后,再扩大到同类目录或文件。

 

  例如【src/*/generated/】和【/generated/**】覆盖范围明显不同。规则越宽,越需要检查是否误排正常源码。SonarQube的排除参数使用路径匹配模式,并非普通正则表达式。

 

  3、只排除某项指标时不要使用源码排除

 

  有些文件仍然需要做静态分析,只是不适合计算覆盖率或重复代码,此时应单独设置。

 

  ①不参与覆盖率统计时使用【sonar.coverage.exclusions】。

 

  ②不参与重复代码检测时使用【sonar.cpd.exclusions】。

 

  ③测试文件需要退出测试分析范围时使用【sonar.test.exclusions】。

 

  ④只有完全不需要进入源码分析时,才使用【sonar.exclusions】。

 

  如果目标只是解决覆盖率偏低,却使用【sonar.exclusions】把文件整体过滤,Bug、漏洞和代码质量问题也可能随之失去分析机会。SonarQube将分析范围、覆盖率排除和重复代码排除作为不同配置处理。

 

  二、SonarQube排除规则不生效如何检查

 

  排除规则已经填写,但扫描结果没有变化时,应先检查Scanner最终使用的路径和参数,而不是继续叠加更多【**】。

 

  1、确认规则基于正确的项目路径

 

  ①找到Scanner本次分析使用的项目基础目录。

 

  ②从该目录重新判断目标文件的相对路径。

 

  ③核对目录名称、大小写和文件扩展名。

 

  ④将复杂规则临时替换成一个具体文件或具体目录。

 

  ⑤重新扫描,确认最小规则能否命中。

 

  如果简单规则能够生效,说明配置入口正常,问题主要集中在原通配符的目录层级或匹配范围。

 

  2、检查是否使用错了排除参数

 

  ①文件仍然出现代码问题时,确认没有只设置【sonar.coverage.exclusions】。

 

  ②重复代码仍被计算时,检查【sonar.cpd.exclusions】。

 

  ③测试文件范围异常时,检查【sonar.test.exclusions】和测试源码范围。

 

  ④目标文件需要完全退出扫描时,再核对【sonar.exclusions】。

 

  “文件仍然能在SonarQube中看到”不一定代表配置无效,有时只是当前设置只排除了某一个质量指标。

  3、检查CI或构建脚本是否覆盖了项目配置

 

  同一个参数可能同时存在于SonarQube项目设置、项目配置文件和CI/CD扫描命令中。

 

  ①检查项目页面当前保存的排除规则。

 

  ②再检查sonar-project.properties、Maven、Gradle或其他Scanner配置。

 

  ③查看CI脚本中是否另外传入了【sonar.exclusions】。

 

  ④发现同一参数多处配置时,确认本次扫描究竟使用哪一个值。

 

  ⑤删除无必要的重复配置后重新扫描。

 

  SonarQube允许在服务器和CI/CD主机等不同层级提供分析参数,较高优先级的运行时配置可能让项目页面中的设置看起来“没有生效”。

 

  三、排除规则修改后怎么确认范围真正正确

 

  规则能够生效还不够,还要确认它没有把应该分析的文件一起排除。比较可靠的方法,是同时检查Scanner上下文、扫描日志和一组具有代表性的文件。

 

  1、核对Scanner实际读取的配置

 

  ①完成一次新的分析任务。

 

  ②进入【Project Settings】→【Background Tasks】。

 

  ③找到对应的扫描任务。

 

  ④打开【Show SonarScanner Context】。

 

  ⑤搜索【sonar.exclusions】以及其他排除参数,确认最终值和预期一致。

 

  SonarQube提供Scanner Context用于核对分析过程中使用的参数;扫描调试日志还可以查看哪些源码和测试文件实际被索引。

 

  2、用两类文件检查是否出现误排

 

  ①从目标目录选择一个【必须排除】的文件。

 

  ②在相邻目录选择一个【必须保留】的正常源码。

 

  ③重新扫描后分别确认两者状态。

 

  ④如果必须排除的文件仍被分析,继续缩小路径问题。

 

  ⑤如果正常源码也消失,则收窄当前通配符范围。

 

  这种对照检查能同时发现“规则没有命中”和“规则命中过多”两种问题,比只观察项目总文件数或问题数量更容易确认实际分析边界。

 

  3、把长期排除规则纳入项目维护

 

  ①生成代码、第三方代码和测试资源分别建立独立规则。

 

  ②避免长期依赖CI命令临时覆盖正式配置。

 

  ③调整源码目录结构后同步检查排除模式。

 

  ④新增规则时记录排除原因和影响范围。

 

  ⑤升级Scanner或调整流水线后,再执行一次代表性文件验证。

 

  另外,SonarQube默认还会考虑源码管理系统的忽略规则,例如Git项目中的.gitignore;如果实际扫描范围与预期不一致,也应把这一层一起检查。

  总结

 

  SonarQube文件排除真正需要管理的是分析范围,而不是单纯让某些目录从结果中消失。配置前先确定文件是否应完全退出扫描,还是只退出覆盖率、重复代码等单项统计;规则不生效时,再从路径基准、参数类型和配置覆盖关系逐层定位。最后通过Scanner Context和“应排除、应保留”两类文件进行对照验证,既能确认规则已经生效,也能及时发现范围过宽造成的误排。如需进一步了解SonarQube文件排除规则设置、扫描范围验证及排除规则不生效排查方法,欢迎联系咨询。

135 2431 0251