一、<sonar.coverage.exclusions>的解释
-
含义:
<sonar.coverage.exclusions>主要用于排除某些文件或代码部分不被代码覆盖率分析工具考虑。代码覆盖率分析工具通常会统计代码中被测试用例覆盖的部分,而使用<sonar.coverage.exclusions>可以指定哪些代码不参与代码覆盖率的统计。
-
示例:
- 假设你有一个 GlobalNav 前端项目,其中包含一些配置文件、自动生成的代码或者一些第三方库代码,这些部分可能不需要进行代码覆盖测试。例如,你可以在
sonar-project.properties中这样配置:
- 假设你有一个 GlobalNav 前端项目,其中包含一些配置文件、自动生成的代码或者一些第三方库代码,这些部分可能不需要进行代码覆盖测试。例如,你可以在
sonar.coverage.exclusions=**/config/*.js,**/generated/*.js,**/node_modules/**/*.js
- 在这个例子中,
**/config/*.js排除了config目录下的所有.js文件,**/generated/*.js排除了generated目录下的所有.js文件,**/node_modules/**/*.js排除了node_modules目录及其子目录下的所有.js文件不参与代码覆盖率的统计。这是因为这些文件可能不是你自己开发的核心业务逻辑代码,或者不适合进行单元测试。
二、<sonar.exclusions>的解释
-
含义:
<sonar.exclusions>更广泛地用于排除文件或代码部分不被 SonarQube 分析。SonarQube 会进行多项代码质量检查,如代码规范检查、潜在问题发现、代码重复检查等,而使用<sonar.exclusions>可以让某些文件或代码部分不参与 SonarQube 的任何分析。
-
示例:
- 继续以 GlobalNav 前端项目为例,如果你有一些旧的代码,暂时不想对其进行任何 SonarQube 分析,或者某些特定的脚本文件、测试数据文件等。你可以这样配置:
sonar.exclusions=**/old/*.js,**/scripts/*.js,**/testdata/*.js
- 这里的
**/old/*.js排除了old目录下的所有.js文件,**/scripts/*.js排除了scripts目录下的所有.js文件,**/testdata/*.js排除了testdata目录下的所有.js文件不参与 SonarQube 的任何分析,包括代码质量检查、代码重复度检查、潜在问题发现等。
三、区别总结
-
范围不同:
<sonar.coverage.exclusions>主要聚焦于代码覆盖率的排除,只影响代码覆盖率分析部分。它允许你将一些代码排除在测试覆盖度的检查范围之外,而其他的 SonarQube 分析(如代码质量检查、潜在问题发现等)可能仍然会对这些代码进行分析。<sonar.exclusions>具有更广泛的排除范围,它会将文件或代码部分从 SonarQube 的所有分析中排除,包括代码质量检查、代码重复度检查、潜在问题发现、代码覆盖率分析等。
-
目的不同:
- 使用
<sonar.coverage.exclusions>的主要目的是避免对某些代码的代码覆盖率分析,可能是因为这些代码无法或无需进行单元测试,比如第三方库、配置文件或自动生成的代码等。 - 使用
<sonar.exclusions>的目的是将某些代码完全排除在 SonarQube 的检查范围之外,可能是因为这些代码是过时的、实验性的、临时的,或者有其他特殊原因不希望进行任何 SonarQube 检查。
- 使用
在实际项目中,根据你的具体需求,合理使用这两个排除项可以帮助你更好地利用 SonarQube 工具,避免对不必要的代码进行不必要的分析,同时更准确地评估核心业务代码的代码质量和测试覆盖情况。例如,在 GlobalNav 项目中,如果你只想关注核心导航逻辑代码的代码覆盖率和质量,就可以将配置文件、旧代码、第三方库代码等通过这两个排除项进行合理排除。