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

SonarQube重复代码块拦截构建 非继承解决方案咨询

SonarQube Major级问题修复:移除结构相同、注解不同类的重复代码块

当前问题为SonarQube检测到JPA持久层实体类Employee、接口层EmployeeDTO存在大段结构完全一致的字段、getter/setter重复代码,触发构建拦截,且要求不使用抽象类继承方案,避免注解失效、保留分层类的独立可见性,可落地的方案如下:

优先方案:使用Lombok消除模板化重复代码

这是目前行业内针对这类纯数据类重复代码的通用解法,完全满足约束要求:

  • 两个类不需要做任何继承关联,分层边界完全保留
  • 字段上的JPA、Swagger注解不会有任何识别问题
  • 重复的getter/setter代码全部在编译期自动生成,不需要手写
  • 改造步骤:
    • 给项目引入Lombok依赖
    • 给两个类分别添加@Getter、@Setter类注解
    • 删除所有手写的get/set方法
  • 改造后代码示例:
// Employee实体类
@Entity
@Table(name = "my_table")
@Getter
@Setter
public class Employee {
  @Id
  @Column(name = "ID")
  private Integer id;
   
  @Column(name = "NAME")
  private String name;
   
  @Column(name = "AGE")
  private Integer age;
}
// EmployeeDTO类
@ApiModel(value = "Employee")
@Getter
@Setter
public class EmployeeDTO {
  @ApiModelProperty(required = false, example = "1")
  private Integer id;
   
  @ApiModelProperty(required = false, example = "Jhon")
  private String name;
   
  @ApiModelProperty(required = false, example = "25")
  private Integer age;
}

改造后两个类的有效代码只有字段定义和专属注解,类级注解、字段级注解差异明显,SonarQube不会再判定存在重复代码块,后续新增字段只需要加字段定义即可,不需要重复写get/set,维护成本大幅降低。

兜底方案:配置SonarQube重复检测排除规则

如果项目暂时不允许引入Lombok,可以针对性调整SonarQube检测规则绕过拦截:

  • 进入对应项目的SonarQube配置页,找到代码重复检测规则项
  • 添加排除路径规则,将持久层entity包、接口层dto包下的纯数据类排除出重复代码检测范围

该方案本质是绕过校验,没有实际减少重复代码的维护成本,仅作为临时过渡方案使用。

  • 注意:抽象类继承方案确实不推荐使用,这类方案会打破分层架构的隔离性,且部分版本的JPA、Swagger对父类继承字段的注解扫描存在兼容问题,后续迭代很容易出隐式bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:03:23