6

我最近将 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 文件进行了逆向工程以查看 rule 的来源squid:S1068 UnusedPrivateFieldCheck.java。与 Lombok 相关的扩展更改已经存在并且显然有效!

4

3 回答 3

10

最后,我可以在@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) 上是行不通的。

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

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

于 2015-09-08T15:10:11.537 回答
4

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

脚步:

CD 到您要运行它的路径,并在运行 sonar-runner 时添加以下参数:

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

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

于 2015-10-19T17:58:04.600 回答
0

添加这些属性:

-Dsonar.language=java
-Dsonar.java.binaries=target/classes
-Dsonar.java.libraries=target/lib/*.jar
于 2022-01-12T15:51:47.417 回答