带有 Java 插件 3.5 的 SonarQube 4.5.4 无法识别特殊的 Lombok 注释

SonarQube 4.5.4 with Java plugin 3.5 doesn't recognize special Lombok annotations

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

我们用 @Data 注释了 类,但规则 squid:S1068 似乎无法处理此 "special" 注释。尽管根据 https://github.com/SonarSource/sonar-java/pull/257 and https://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 相关更改在那里并且显然有效!

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

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

需要为所有 类 及其依赖项修复字节码分析以获得正确的结果。我必须设置以下 Sonar 属性:

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 注释得到识别。

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

步数:

CD到你要运行的路径上,当你运行sonar-运行ner时加入如下参数:

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

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

添加这些属性:

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