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
相关产品推荐
相关产品推荐

