我最近将 SonarQube 更新到 4.5.4 版,将 Java 插件更新到 3.5 版。
我们有使用 @Data
注释的类,但规则 squid:S1068
似乎不处理这种“特殊”注释。尽管根据 https://github.com/SonarSource/sonar-java/pull/257 从 3.4 版开始应该忽略它们和 https://jira.sonarsource.com/browse/SONARJAVA-990 .
请参阅随附的屏幕截图。我是不是忘记配置什么了?
更新:
我想确保我们使用的 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
之前,通过运行 mvn dependency:copy-dependencies 将所有 Maven 依赖项(也包括临时依赖项)移动到文件夹
现在分析之前。target/dependency
现在 CI 构建日志更清晰,Lombok 注释得到识别。
关于java - 带有 Java 插件 3.5 的 SonarQube 4.5.4 无法识别特殊的 Lombok 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32452931/