SonarQube+;龙目组态
我正在启动一个新项目,我需要使用SonarQube+;龙目组态,sonarqube,lombok,Sonarqube,Lombok,我正在启动一个新项目,我需要使用SonarQube,我想使用Lombok,我已经在Eclipse中配置了它,除了静态分析之外,一切都很好 未使用的私有字段:当我有@Data类时,所有字段都报告为未使用的私有字段 @Getter(lazy=true):当我使用此注释时,我会对已知为非null的值进行冗余null检查,请参见(这与编译代码相关) 我认为一个可能的解决方案是delombok项目,编译并运行Sonar SonarQube Jira中的类似问题: (@SuppressWarn
SonarQube
,我想使用Lombok
,我已经在Eclipse中配置了它,除了静态分析之外,一切都很好
- 未使用的私有字段:当我有
类时,所有字段都报告为@Data
未使用的私有字段
:当我使用此注释时,我会对已知为非null的值进行@Getter(lazy=true)
冗余null检查,请参见(这与编译代码相关)
delombok
项目,编译并运行Sonar
SonarQube Jira
中的类似问题:
@SuppressWarnings(“PMD.UnusedPrivateField”)
解决方案不适用于最新的SonarQube 4.2
)
我怎样才能解决这个问题 不久前我问了一个类似的问题: 基本上,您不能再在代码中使用注释(如@SuppressWarnings)了。相反,您需要在SonarQube中设置(全局)规则排除: 单击设置->排除->问题 并在“忽略多个标准上的问题”部分添加条目,然后输入如下内容:
Rule Key Pattern File Path Pattern
squid:S1068 **/models/**/*.java
它使您的源代码更简洁(因为您不再需要@SuppressWarnings),但我不喜欢设置全局规则的想法,因为它可能会导致其他问题
更新: 对于“已知为非null的值的冗余nullcheck”,可以添加如下内容:
Rule Key Pattern File Path Pattern
findbugs:RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE **/xxxxx.java
还有一个可能(也可能不)对你有用的:
Rule Key Pattern File Path Pattern
common-java:InsufficientBranchCoverage **/models/**/*.java
作为一种解决方法,我现在让sonar对delombok生成的代码进行分析 我想这也不是一个完美的解决方案,因为我在分析生成的代码,而不是实际由开发人员编写的代码。不过,我发现这是一个比在声纳本身中使用
@SuppressWarnings、//NOSONAR
或关闭规则更好的解决方案
下面是在Maven中实现这一点的示例。将此添加到pom.xml中:
...
src/main/java
...
...
...
org.projectlombok
lombok maven插件
${lombok plugin.version}
验证
德隆博克
假的
src/main/java
...
...
...
声纳
目标/生成源/德隆博克
org.projectlombok
lombok maven插件
${lombok plugin.version}
验证
德隆博克
真的
src/main/java
org.codehaus.mojo
声纳maven插件
2.2
...
我已经添加了一个。有关二进制文件,请访问此处:
src/main/java/**/*
是的,我对你的问题投了赞成票,但是你的解决方案只适用于@Data
注释,而且我有一些@ManagedBeans(JSF)
类带有@Getter@Setter
,并且不是所有项目都使用lombock
,也不是所有字段都使用注释,所以,我认为,在我的情况下,这不是一个解决方案。对于@Getter(lazy=true)
这个解决方案不适用。在我的项目中,我也设置了“冗余nullcheck”警告。您只需要找到这些规则键并向它们添加异常。(另请参见我上面的更新)我认为lombok
应该增加代码的易读性并减少代码的大小,而不是强制禁用声纳规则,这在某些情况下可能会很有用。@AVolpe:我敢打赌,lombok做得很对,而声纳是错的。1.对于@Data
,在Lombok生成getter之前,字段实际上是未使用的。不管它如何做,问题在于检查工具没有考虑生成。2.关于“已知非空值的冗余nullcheck”,问题是该值不能保证非空,@maaartinus当与@Data
一起使用时,冗余nullcheck
不会出现,它出现在没有@Data
的类中。你说得对,这不是lombok的问题,这是SonarQube的问题,我不把这个问题归咎于lombok,我只是说这是必要的另一个解决方案,它不会强制减少规则集,例如,当你用@PostConstruct
标记一个方法并将其私有化时,Sonar会抛出未使用的规则,我认为我们需要定义一种机制来使用特定的注释跳过一些方法/字段。我试着只放pom的相关部分,因此如果您有进一步的问题,请随时提问。我还注意到,在此期间是固定的,所以可能上面的代码可以以某种方式简化。这不会导致SCM插件/错误的问题吗?
<properties>
<!-- Sonar will analyze the delombokized version of the code -->
<sonar.exclusions>src/main/java/**/*</sonar.exclusions>
</properties>