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

如何在Sonar覆盖配置中排除包但包含其子包及指定类?

解决Sonar覆盖率排除指定包但包含子包及特定类的问题

刚好我之前处理过类似的Sonar覆盖率配置需求,给你梳理个清晰的解决方案!

你的核心需求是:排除com.myapp.model包下的大部分类,但保留model.mapper子包所有类,以及model包下的ClassToInclude.java。结合Sonar的规则,我们可以通过排除规则+包含规则的组合来实现,而且不需要逐个添加排除类。

正确的配置方案

你之前用<sonar.coverage.exclusions>**/model/*.java</sonar.coverage.exclusions>已经实现了排除model包下直接的类(子包不受影响,因为通配符*.java只匹配当前目录的文件,不递归子目录)。现在只需要再加上包含规则,把特定类明确纳入统计即可:

<properties>
  <!-- 排除model包下直接的所有Java类(子包类不会被匹配到) -->
  <sonar.coverage.exclusions>**/model/*.java</sonar.coverage.exclusions>
  <!-- 明确指定需要包含的类:特定类 + mapper子包所有类 -->
  <sonar.coverage.inclusions>**/model/ClassToInclude.java, **/model/mapper/**/*.java</sonar.coverage.inclusions>
</properties>

配置细节说明

Sonar的规则是包含规则的优先级高于排除规则,所以即使某个文件被匹配到排除规则,只要它同时在包含规则里,就会被纳入覆盖率统计。这里的通配符含义:

  • **/model/*.java:匹配model包下直接的所有.java文件,不会匹配子包(比如model/mapper/下的文件)
  • **/model/ClassToInclude.java:精准匹配model包下的这个特定类
  • **/model/mapper/**/*.java:匹配model.mapper子包下所有层级的.java文件(包括子子包)

备选方案(不推荐但可行)

如果你不想用包含规则,也可以通过更精准的排除通配符,排除model下除了ClassToInclude.java之外的所有直接类:

<sonar.coverage.exclusions>**/model/*[!ClassToInclude].java</sonar.coverage.exclusions>

不过这种方式依赖文件名的匹配语法,当需要包含多个特定类时,维护起来会很麻烦,所以更推荐第一种“排除+包含”的组合方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:27:27