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

时间:2018-10-18 01:37:50

标签: 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

}

严重性为“严重”。因此,我想忽略它。然后,我在两个类中都添加了@SuppressWarning(“ common-java:DuplicatedBlocks”)和@SuppressWarning(“ all”)。但这是不容忽视的。

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

4 个答案:

答案 0 :(得分:1)

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

如果您足够确信这两个代码块具有不同的角色,则可以从Web控制台将报告的严重性级别更改为MinorInfo。例如,请参见下面的屏幕截图: enter image description here

有时候,Sonar报告说,在一些不很严格的事情上,情况很严重,但又取决于项目的性质:)

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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

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

Copy the default and edit it to accept duplication percentage according to your comfort level

答案 3 :(得分:0)

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

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

  1. 转到声纳仪表板。
  2. 点击问题。
  3. 选择您的课程和问题并进一步检查查看规则。
  4. 规则描述的右上角提到了规则 ID。

enter image description here