sonarqube + lombok = 误报

sonarqube + lombok = false positives

import lombok.Data;

@Data
public class Filter {
    private Operator operator;
    private Object value;
    private String property;
    private PropertyType propertyType;
}

对于上面的代码,有 4 squid:S1068 个关于未使用的私有字段的报告。 (即使它们被 lombok 生成的吸气剂使用)。我已经看到一些与支持 "lombok.Data" 注释相关的修复已被推送,但仍然存在这些烦人的误报。

版本: SonarQube 6.4.0.25310
SonarJava 4.13.0.11627
Jenkins 的 SonarQube 扫描仪 (2.6.1)

Sonar应该可以完美处理这种情况Java。至少从版本 3.14 (SONARJAVA-1642) 开始考虑 Lombok 注释。您遇到的问题是由于 Java 项目配置错误造成的。无需编写任何自定义规则来处理此问题,分析器本身就支持此功能。

SonarJava 读取字节码以了解使用了哪个注解。因此,如果您 不提供来自您的依赖项的字节码 ,在您自己的代码的字节码之上,分析器将表现不稳定。

特别是,设置 属性 sonar.java.libraries 应该可以解决您的问题。请注意,此 属性 通常在使用 SonarQube maven 或 gradle 扫描仪时自动设置。

请查看文档以正确配置您的项目:https://docs.sonarqube.org/display/PLUG/Java+Plugin+and+Bytecode

我在 Sonar 分析属性文件中添加了以下 属性。它对我有用。

sonar.java.libraries=${env.HOME}/.m2/repository/org/projectlombok/lombok/**/*.jar

lombok v1.16.20 是我项目中的 lombok 版本。

我正在使用 sonar-maven-plugin 3.4.0.905,lombok 1.16.18,SonarQube CE 服务器 v8.3.1。

我通过添加解决了这个问题 <sonar.java.libraries>target/classes</sonar.java.libraries> 到 POM 属性。

您可以配置忽略问题规则:

sonar.issue.ignore.multicriteria=e1
sonar.issue.ignore.multicriteria.e1.ruleKey=java:S1068