我从 Sonar 中 lombok 生成的代码中得到了很多代码味道。 F.E.:
方法 Dto.hashCode() 将返回结果存储在本地,然后立即返回
Dto.equals(对象) 过于复杂,圈复杂度为 58
我如何指出声纳应从分析中跳过此操作?
更新
我已经试过了。我的根目录中的
lombok.config
文件是:
config.stopBubbling = true
lombok.addLombokGeneratedAnnotation = true
lombok.equalsAndHashCode.callSuper = call
这没有帮助
我已经尝试过了:sonarqube + lombok =误报 我已将根目录中的:
sonar-project.properties
更新为:
sonar.sources=src/main
sonar.tests=src/test
sonar.language=java
sonar.java.binaries=build/classes
sonar.junit.reportPaths=build/test-results/test/
sonar.jacoco.reportPaths=build/jacoco/jacocoTest.exec
sonar.java.libraries=.gradle/caches/**/lombok-*.jar
也不起作用。
请不要关闭它。这不是重复。
我刚刚遇到了同样的问题。我正在使用声纳扫描仪,并发现它需要使用命令行参数设置 Lombok jar 文件。
例如:
sonar-scanner -D sonar.java.libraries=/home/gitlab-runner/.gradle/caches/modules-2/files-2.1/org.projectlombok/lombok/1.18.10/625fc0055674dff70dbc76efa36d0f2c89b04a24/lombok-1.18.10.jar
现在 SonarQube 不会显示任何与 Lombok 注释相关的问题。
lombok 生成的方法需要用 @Generated 注解。然后 Sonarqube 将忽略它们。
只需在项目根目录下添加一个文件
lombok.config
,内容如下:
lombok.addLombokGeneratedAnnotation=true
确保
lombok.jar
位于 sonar.java.libraries
属性中引用的目录内。
我遇到了同样的问题,我添加了该属性,但我引用了我的运行时包的目录,该目录不包含
lombok.jar
!
lombok.jar
在编译时使用,在运行时无用,因此我们避免将其添加到此目录中。
对我来说,问题与声纳下载优化有关。
为了解决这个问题,我只需在我的
true
中将此属性从false
更改为build.gradle
:
sonar {
properties {
// Download optimization deve ficar desabilitado devido a um problema do Sonar com as regras do Lombok
// https://community.sonarsource.com/t/a-lot-of-false-positive-issues-related-to-lombok-after-sonarqube-upgrade/109764
property "sonar.plugins.downloadOnlyRequired", "false"
// ....
}
}