【问题标题】:Sonarqube gradle plugin coverage with LombokSonarqube gradle 插件覆盖 Lombok
【发布时间】:2018-08-14 22:03:57
【问题描述】:

我有一个使用 Sonarqube 和 Jacoco 插件在 gradle 项目中使用 Lombok 的 @Data 注释的类。

源码可在here on github获取

我有一个本地运行的sonarqube server 作为 docker 容器运行,如下所示:

docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube  

我添加了一个“lombok.config”文件,要求它根据文档中的全局配置键部分here 为其生成的代码添加@Lombok.Generated 注释。

lombok.addLombokGeneratedAnnotation = true

我有以下声纳条件配置。

当我第一次运行 sonarqube 目标时,它报告项目通过了。

如果我随后将 lombok.addLombokGeneratedAnnotation 切换为 false,并重新运行 sonarqube 目标,它会报告失败:

如果我随后将 lombok.addLombokGeneratedAnnotation 切换回 true,并再次重新运行,sonarqube 报告该项目仍然失败。而且我不能让项目再次通过。

然后我更改了 build.gradle 文件中的组名,以强制 sonarqube gradle 插件在 Sonarqube 服务器中创建一个新项目。当我这样做时,项目再次通过。

在此过程中,我从未更改过任何源代码。

请问有人知道为什么 Sonarqube 会这样吗?

【问题讨论】:

    标签: java gradle sonarqube lombok


    【解决方案1】:

    在此过程中,我从未更改过任何源代码。

    哦,但你有。或者更确切地说,Lombok 通过在您的代码中插入(或不插入)注释来实现。

    您正在使用仅查看“新代码”的质量门。在您的第一次分析中,没有代码是新的,因此没有任何代码可供考虑。然后你调整你的 Lombok 设置,重新生成并重新分析。 Lombok 显然对您的代码进行了一些 更改。我从未使用过 Lombok,因此无法详细说明此处发生的情况,但您可以单击项目主页上的 New Coverage 相关指标以获取文件列表。钻取文件以查看其中被视为“新”的内容(黄色突出显示)。查看边缘标记(红色、绿色、黄色条纹)以了解被视为已覆盖的内容。

    注意您的质量门目前要求新代码中的条件覆盖率达到 99%。这是不现实的,而且已经超过了收益递减的点。你应该重新考虑这个值。 IMO 85-95% 更现实,具体取决于您的团队。

    【讨论】:

    • 谢谢。条件覆盖不是在所有代码上,而不是新代码上吗?如果您编辑质量门,我可以看到添加“条件覆盖”或“新代码的条件覆盖”的选项。我们从另一个团队继承了这些设置。我可以理解你关于 99% 的观点。无论如何 - 我注意到 SonarJava 插件是 v4.x。 v5.1.1 插件修复了使用 Jacoco 0.8.0 - 当我们更新插件时,我们的 Lombok 生成的代码似乎不再被检查。我刚开始使用 Sonarqube 和 lombok,所以所有的学习经验......
    【解决方案2】:

    为了将来参考,我们发现问题已通过将 SonarJava 插件更新到最新的 5.1.1 版本来解决。

    我认为在 5.1 版中升级到 Jacoco 0.8.0 的这张票可能是开始兑现 @Lombok.Generated 注释的事情。

    【讨论】:

      猜你喜欢
      • 2016-12-14
      • 2018-01-16
      • 2015-08-03
      • 2018-07-08
      • 2019-08-11
      • 1970-01-01
      • 2017-06-06
      • 2018-10-07
      • 2016-12-11
      相关资源
      最近更新 更多