Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SonarQube+;龙目组态_Sonarqube_Lombok - Fatal编程技术网

SonarQube+;龙目组态

SonarQube+;龙目组态,sonarqube,lombok,Sonarqube,Lombok,我正在启动一个新项目,我需要使用SonarQube,我想使用Lombok,我已经在Eclipse中配置了它,除了静态分析之外,一切都很好 未使用的私有字段:当我有@Data类时,所有字段都报告为未使用的私有字段 @Getter(lazy=true):当我使用此注释时,我会对已知为非null的值进行冗余null检查,请参见(这与编译代码相关) 我认为一个可能的解决方案是delombok项目,编译并运行Sonar SonarQube Jira中的类似问题: (@SuppressWarn

我正在启动一个新项目,我需要使用
SonarQube
,我想使用
Lombok
,我已经在Eclipse中配置了它,除了静态分析之外,一切都很好

  • 未使用的私有字段:当我有
    @Data
    类时,所有字段都报告为
    未使用的私有字段
  • @Getter(lazy=true)
    :当我使用此注释时,我会对已知为非null的值进行
    冗余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
...
我已经添加了一个。
有关二进制文件,请访问此处:


对于多模块项目,基于finrod回答中提到的内容,我必须在sonar配置文件中添加以下属性,以避免重复违规(sonar正在分析src/main/java和target/generated sources/delombok)


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>