【问题标题】:sonarqube + lombok = false positivessonarqube + lombok = 误报
【发布时间】:2018-03-03 22:18:49
【问题描述】:
import lombok.Data;

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

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

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

【问题讨论】:

  • 您可以编写自己的规则,我的意思是覆盖 squid:S1068 并添加对 lombok 导入和@Data 存在的测试。
  • @MaxenceLecointe 不需要覆盖任何东西,这是本机支持的。这也将是最糟糕的方法。如果您对某个规则不满意,最好禁用 SonarQube 规则并编写自己的自定义规则:docs.sonarqube.org/display/PLUG/Custom+Rules+for+Java
  • 事实上@Michael-SonarSourceTeam 这就是我所做的,我为这种情况编写了自己的规则并禁用了原始规则。我对“overide”这个词的使用是错误的

标签: sonarqube lombok


【解决方案1】:

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

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

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

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

【讨论】:

  • 现在我不知道如何在詹金斯扫描仪插件中设置sonar.java.libraries。现在使用sonar.java.libraries=$HOME/.m2/**/*.jar
  • sonar.java.libraries 的实际值应该是多少?我们是设置 ${classpath} 还是只设置 lombok.jar 的路径?
  • @user3709525 放置代码运行所需的所有库(jar)的(根)文件夹。
  • 请记住,lombok 依赖项本身在运行时不需要,可以添加为仅在编译时使用。
  • codeclimate 中的 sona-java 仍然存在同样的问题。设置 sonar.java.libraries 属性不起作用。有什么变化吗?
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    我正在使用 sonar-maven-plugin 3.4.0.905、lombok 1.16.18 和 SonarQube CE Server v8.3.1。

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-03-15
        • 2014-09-23
        • 1970-01-01
        • 2018-08-14
        • 2016-08-03
        • 1970-01-01
        • 2019-03-14
        • 2020-02-04
        相关资源
        最近更新 更多