【问题标题】:SonarQube 4.5.4 with Java plugin 3.5 doesn't recognize special Lombok annotations带有 Java 插件 3.5 的 SonarQube 4.5.4 无法识别特殊的 Lombok 注释
【发布时间】:2015-12-03 20:25:56
【问题描述】:

我最近将 SonarQube 更新到 4.5.4 版,将 Java 插件更新到 3.5 版。

我们有用@Data 注释的类,但似乎规则squid:S1068 不处理这种“特殊”注释。尽管根据https://github.com/SonarSource/sonar-java/pull/257https://jira.sonarsource.com/browse/SONARJAVA-990,自3.4 版以来它们应该被忽略。

请参阅随附的屏幕截图。我是不是忘了配置什么?

更新:

我想确保我们使用的 Java 插件 3.5 包含了提交 https://github.com/benzonico/sonar-java/commit/5e7de16f59450061227d4103f64e351d1f93d9e9 的更改,因此我对 .jar 文件进行了逆向工程以查看规则 squid:S1068 UnusedPrivateFieldCheck.java 的来源。与 Lombok 相关的扩展更改已经存在并且显然有效!

【问题讨论】:

  • 您的分析如何(maven 或 sonar-runner)?您如何向分析器提供字节码(尤其是 @Data 注释的字节码)?如果未提供字节码,则无法解析类型并引发问题。
  • 我们使用 Sonar Maven 插件进行分析:mvn sonar:sonar -Dsonar.branch=some_branch_name。我认为我们目前不提供字节码。 @benzonico 这是一个非常有用的声明,我现在要试试你的建议
  • 使用 maven 通常由 maven 插件自动完成。

标签: java sonarqube lombok sonarqube-4.5


【解决方案1】:

在@benzonico 的评论的帮助下,我终于可以回答我自己的问题了。

在我们 CI 系统的 Sonar 构建日志中,我发现了许多警告消息:[WARN] [16:51:48.435] Class 'com/bla/bla/Application' is not accessible through the ClassLoader.

为了获得正确的结果,需要对所有类及其依赖项进行字节码分析。我必须设置以下声纳属性:

sonar.java.binaries=target/classes
sonar.java.libraries=target/dependency/*.jar

请注意,如果没有 sonar.java.binaries=target/classes,它将无法正常工作,至少在我们的 CI 系统 (TeamCity) 上是这样。

在运行 mvn sonar:sonar 之前,所有 Maven 依赖项(也是瞬态的)通过在分析之前运行 mvn dependency:copy-dependencies 移动到文件夹 target/dependency

现在 CI 构建日志更清晰,Lombok 注释得到识别。

【讨论】:

【解决方案2】:

同样你可以直接添加到命令行:

步骤:

CD 到你想运行它的路径,当你运行 sonar-runner 时添加以下参数:

-Dsonar.java.binaries=target/classes -Dsonar.java.libraries=target/lib/*.jar

注意:对我来说,jar 是 target/lib,而不是 target/dependency。

【讨论】:

    【解决方案3】:

    添加这些属性:

    -Dsonar.language=java
    -Dsonar.java.binaries=target/classes
    -Dsonar.java.libraries=target/lib/*.jar
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-14
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      • 1970-01-01
      相关资源
      最近更新 更多