sonarqube+;lombok=假阳性

sonarqube+;lombok=假阳性,sonarqube,lombok,Sonarqube,Lombok,对于上面的代码,有4个squid:S1068关于未使用的私有字段的报告。(甚至lombok生成的getter也使用它们)。我已经看到一些与支持“lombok.Data”注释相关的修复已经推出,但仍然存在这些恼人的误报 版本: SonarQube 6.4.0.25310 SonarJava 4.13.0.11627 用于Jenkins的SonarQube扫描仪(2.6.1)SonarJava应完美处理此案例。至少从版本3.14()开始,Lombok注释就被考虑在内了。您遇到的问题是由于Java项目

对于上面的代码,有4个squid:S1068关于未使用的私有字段的报告。(甚至lombok生成的getter也使用它们)。我已经看到一些与支持“lombok.Data”注释相关的修复已经推出,但仍然存在这些恼人的误报

版本: SonarQube 6.4.0.25310
SonarJava 4.13.0.11627

用于Jenkins的SonarQube扫描仪(2.6.1)

SonarJava应完美处理此案例。至少从版本3.14()开始,Lombok注释就被考虑在内了。您遇到的问题是由于Java项目的错误配置造成的。不需要编写任何自定义规则来处理此问题,分析器本机支持这一点

SonarJava读取字节码以了解使用的注释。因此,如果不提供依赖项中的字节码,那么除了您自己的代码中的字节码之外,分析器的行为将不稳定

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


为了正确配置您的项目,请查看文档:

我在jenkins Sonar analysis属性中添加了以下属性。为我工作

import lombok.Data;

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

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

我正在使用SonarMaven插件
3.4.0.905,
lombok
1.16.18,SonarQube CE服务器v8.3.1

我通过添加
target/classes
到POM属性。

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

sonar.java.libraries=/jenkins/jenkins-user-home/.m2/repository/org/projectlombok/lombok/1.16.20/lombok-1.16.20.jar

您可以编写自己的规则,我的意思是越过squid:S1068并添加lombok import和@Data存在性的测试。@MaxEnteleCenter无需重写任何内容,这是本机支持的。这也是最糟糕的办法。如果您对规则不满意,最好禁用SonarQube规则并编写自己的自定义规则:事实上@Michael SonarSourceTeam这就是我所做的,我为本例编写了自己的规则并禁用了原始规则。我现在不知道如何在jenkins scanner插件中设置
sonar.java.libraries
,使用单词“overide”是错误的。现在使用
sonar.java.libraries=$HOME/.m2/***.jar
。sonar.java.libraries的实际值应该是多少?我们是设置${classpath}还是只设置lombok.jar的路径?@user3709525是放置代码运行所需的所有库(jar)的(根)文件夹。请记住,lombok依赖本身在运行时不需要,只能在编译时添加。我在codeclimate中仍然存在与sona java相同的问题。设置
sonar.java.libraries
属性无效。有什么变化吗?
sonar.issue.ignore.multicriteria=e1
sonar.issue.ignore.multicriteria.e1.ruleKey=java:S1068