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

Ner*_*don 13 java sonarqube

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

}
Run Code Online (Sandbox Code Playgroud)

严重性是主要的。所以,我想忽略它。然后,我将 @SuppressWarning("common-java:DuplicatedBlocks") 和 @SuppressWarning("all") 添加到两个类中。但它不能被忽视。

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

Mit*_*del 8

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

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

例如,您可以将以下属性添加到您的扫描仪配置中:

sonar.cpd.exclusions=path/to/your/package/*.java
Run Code Online (Sandbox Code Playgroud)

  • **或将其标记为“无法修复”** - 但如何解决?我找不到这个报告重复行的按钮。根本不。 (42认同)
  • 我正在使用自动生成的验证代码,它扩展了正在验证的对象的架构。任何重用的子对象都将被定义为重复。对于这样的实例,如果能在 UI 中进行覆盖就好了。 (2认同)

Yog*_*Rai -12

将其放入答案部分以附上屏幕截图:

如果您有足够的信心认为这两个代码块具有不同的角色,那么您可以将报告的严重性级别更改为Web 控制台MinorInfo从 Web 控制台更改。例如,请参见下面的屏幕截图: 在此输入图像描述

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

但是,就像 @Stephen上面的评论中提到的那样,如果xxx相同的字段并且继承有意义,那么您可以使用父抽象类来避免报告。

  • 但是......在“重复线”的情况下,声纳没有显示问题,因此不可能将其标记为“无法修复” (82认同)
  • 这是不正确的,因为 Sonar 不会将重复项显示为问题,如屏幕截图所示。 (2认同)
  • 即使它被接受,这也不是正确的答案。如果出现代码重复,则无法将其标记为“无法修复”。 (2认同)