如何忽略 Sonar 中的重复代码报告?

问题描述 投票:0回答:5

SonarQube 将“重复代码块”报告给不同的简单 POJO 类,如下所示。 在这种情况下,A和B是不同的角色。所以,我认为我不应该创建抽象类。

public class A{
  private String xxx;

  // omitted other fields.

  public A() {}

  public String getXxx() {
     return xxx;
  }
  public void setXxx(String xxx) {
     this.xxx= xxx;
  }

  // omitted other fields' setter and getter

}

public class B{
  private String xxx;

  // omitted other fields.

  public B() {}

  public String getXxx() {
     return xxx;
  }
  public void setXxx(String xxx) {
     this.xxx= xxx;
  }

  // omitted other fields' setter and getter

}

严重程度非常严重。所以,我想忽略它。然后,我将

@SuppressWarning("common-java:DuplicatedBlocks")
@SuppressWarning("all")
添加到两个类中。但也不能忽视。

虽然在JIRA中提出了类似的问题,但尚未解决。我的 SonarQube 版本是 6.5。

java sonarqube
5个回答
28
投票

您可以通过多种方法来实现这一目标,具体取决于您对此重复问题的重视程度。 SonarQube 报告它发现的内容,完全由您决定如何处理它。

  • 如果您认为这确实是一个问题,则必须重构您的代码:SonarQube 在没有重复时无法报告重复
  • 如果您认为这个特定实例不是问题,您可以降低问题的严重性,或将其标记为“不会修复”,并为后续的人提供一个很好的评论 - 我相信当 SonarQube 中有专用功能时,使用
    @SuppressWarnings
    注释有点滥用
  • 如果您认为 SonarQube 甚至不应该提出有关重复代码的问题,您可以禁用该规则(核心选项),或者设置您的分析以忽略 POJO 包的重复
例如,您可以将以下属性添加到扫描仪配置中:

sonar.cpd.exclusions=path/to/your/package/*.java
    

2
投票
最好的方法是调整质量门以满足您的需求。需要记住,默认的内置质量门是标准的,应该始终是首选。

复制默认值并创建新的质量门。根据您的舒适程度(取决于您的项目需求)对其进行编辑以接受重复百分比。


0
投票
你不能。

但是,如果您发现自己处于需要忽略某些问题(例如重复代码)的情况(例如,对于临时修复或您知道稍后会解决的异常),有一个解决方法:

您可以暂时禁用质量门,作为合并到所需分支的要求。通过这样做,您可以绕过警告并完成合并。

对于那些使用 Azure DevOps 的人:

    导航至项目设置。
  • 转到存储库。
  • 选择Master(或您选择的分支)。
  • 查找状态检查。
  • 根据需要调整设置。


-8
投票
Sonar 通过应用某些规则帮助我们提高代码质量。 但异常总是存在的,如果您确信您的代码需要抑制某些违规行为,则可以使用@SuppressWarnings。 例如 @SuppressWarnings("common-java:DuplicatedBlocks")

现在我们如何获取规则信息或 ID。

    转到声纳仪表板。
  1. 单击“问题”。
  2. 选择您的班级和问题并进一步检查查看规则。
  3. 规则描述右上角提到了规则id。


-12
投票
将其放入答案部分并附上屏幕截图:

如果您足够有信心这两个代码块具有不同的角色,那么您可以从 Web 控制台将报告的严重性级别更改为

Minor

Info
。例如,请参见下面的屏幕截图:

有时,Sonar 报告的情况很严重,但实际上并不严重,但这又取决于项目性质:)

但是,就像上面评论中提到的@

Stephen一样,如果xxx

是相同的字段并且继承有意义,那么您可以拥有父抽象类来避免报告。

© www.soinside.com 2019 - 2024. All rights reserved.