当前位置: 首页 > 知识库问答 >
问题:

用Lombok覆盖Sonarqube gradle插件

丁豪
2023-03-14

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

源代码可在 github 上找到

我有一个本地运行的sonarqube服务器作为docker容器运行,开始如下:

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

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

lombok.addLombokGeneratedAnnotation = true

我有以下声纳状态配置。

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

如果我换了龙目湖。addLombokGeneratedAnnotation为false,并重新运行sonarqube目标,它报告存在故障:

如果我将lombok.addLombokGeneratedAnnotation切换回true,然后再次运行,sonarqube报告项目仍然失败。我无法让项目再次通过。

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

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

请问有没有人知道为什么索纳库贝会这样做?

共有2个答案

柯景龙
2023-03-14

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

我认为5.1版本中升级到Jacoco 0.8.0的这张票可能是开始尊重@Lombok.Generated注释的东西。

夏侯兴怀
2023-03-14

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

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

您正在使用一个只查看“新代码”的质量门。在您的第一次分析中,没有代码是新的,因此没有任何代码可以考虑。然后你旋转你的Lombok设置,重新生成并重新分析。Lombok显然对您的代码进行了一些更改。我从未使用过Lombok,因此我无法详细说明这里发生了什么,但您可以点击项目主页上的新覆盖率相关指标,以获得文件列表。钻取一个文件,查看其中的“新”内容(黄色高亮显示)。查看边缘标记(红色、绿色、黄色条纹)以查看覆盖的内容。

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

 类似资料:
  • 注意:这里有几个人引用的解决方案不适用于我的问题。。。 我有一个java。sql。要在getter中格式化为字符串的时间戳字段。我在课程开始时使用Lombok@Data。但是,当我用自己的getter覆盖Lombok的getter(格式化时间戳)时,字段总是空的。我在文档中没有看到任何东西来解释这种行为。 这段代码将结算日期作为时间戳提供给我: 这个代码块给了我一个NPE,因为setementDa

  • 我在我的项目中使用lombok,并在POJO类上使用和注释生成和。我试图重写属性的setters方法,但它不起作用 我想检查JSON属性是空的还是空的,我想在Setter方法中设置默认值 工作场景: 失败的场景: 输出: 我也将此作为参考,但到目前为止运气不佳

  • 问题内容: 我使用的龙目岛在我的项目和产生和使用,并注解POJO类的顶部。我正在尝试覆盖属性的setter方法,但是它不起作用 我想检查JSON属性是否为空或空,我想在Setter方法中设置默认值 工作方案: 失败的情况: 输出: 问题答案: 您只是遇到了一个我从未见过的错误,或者您正在测试错误。 像这样的注释 在现场一级确实阻止了设置器的生成。但是考虑到要定义一个setter,您甚至不需要它。显

  • 我使用默认构造函数从子类中设置recordId的值,最初没有使用lombok。最终我决定在这里使用构建器,但现在的问题是lombok构建器在内部覆盖了我的默认构建器,因此从未设置值。

  • 我想制作一个插件,允许玩家自定义他们的盔甲模型和纹理。我希望服务器上的其他玩家能够看到这些自定义设置。 由于我从未在插件中做过纹理覆盖,我不知道这是否可行,我也无法在网上找到任何相关的东西。我知道你可以让积木看起来和其他积木一样,但是盔甲不行。 我必须给在线玩家发送一个数据包,还是有其他方法可以做到这一点?如果这是可能的,是否有一个地方记录了如何做到这一点?

  • 当运行Gradle的Jacoco插件时,我在一组选定的类上得到零代码覆盖率报告。我已经确认测试这些类的所有单元测试都已成功运行。 非常有趣的是,EclEmma在Eclipse中生成了正确的代码覆盖率结果。我已经确认这两个工具使用的是相同版本的Jacoco。 我想知道这两种工具的区别是什么?我需要Gradle Jacoco插件的额外配置吗。 编辑:我的Gradle Jacoco输出显示“com类的执