JaCoCo忽略了Lombok代码,这是预期的吗?

问题描述 投票:0回答:1

我使用的是Lombok 1.18.2和JaCoCo 0.8.3,理论上它识别/忽略了lombok注释。我做了一个测试,在我的lombok.addLombokGeneratedAnnotation = true中添加了lombok.config param然后我在我的目标类反编译代码上看到生成的注释。

但我很惊讶打开jacoco.exec文件并看到像@Getter这样的东西增加了“Total Probes”值,但保持不变的“Executed Probes”值。这是预期的吗?

如果是这样,SonarQube如何巧妙地使用它,如果通过将其指向jacoco.exec文件,只有关于总/命中探针的信息? Sonar如何告诉其中一个探测器与lombok有什么关系?

sonarqube jacoco
1个回答
2
投票

我使用的是Lombok 1.18.2和JaCoCo 0.8.3,理论上它识别/忽略了lombok注释。

理论上不是,但practically

不是“忽略lombok注释”,而是使用@lombok.Generated注释的方法,或者更准确地引用0.8.3 changelog中的条目:

由注释注释的类和方法,其保留策略为运行时或类,其简单名称包含“生成”(以前需要相等)在生成报告期间被过滤掉


但我很惊讶打开jacoco.exec文件并看到像@Getter这样的东西增加了“Total Probes”值,但保持不变的“Executed Probes”值。这是预期的吗?

是的,这是预料之中的。在类的检测(插入探针)期间不会发生方法的过滤。 exec文件不是最终报告,它包含有关在类中插入的所有探针的原始信息。在生成报告(execclass文件的分析)期间,即在执行report JaCoCo Ant Task期间,过滤方法。

如果是这样,SonarQube如何巧妙地使用它,如果通过将其指向jacoco.exec文件,只有关于总/命中探针的信息? Sonar如何告诉其中一个探测器与lombok有什么关系?

SonarQube embeds JaCoCo as a libraryuse it to analyze exec and class files for generation of their report

这就是为什么JaCoCo发布公告通常包含以下声明,例如对于0.8.2

和以前一样 - 请注意

作为JaCoCo项目的一部分开发的0.8.2版本的集成(Ant Tasks,Maven Plugin和Command Line Interface)提供了Java 11支持和新的过滤器,

直接读取exec文件(不是最终报告)并将JaCoCo嵌入到生成报告库的工具将提供分析Java 11类文件的能力,并且只有在更新到此版本的JaCoCo后才能使用新过滤器。所以请关注/等待/等各自的供应商,如

SonarQube - https://jira.sonarsource.com/browse/SONARJAVA-2876,或尝试使用读取XML报告的新插件 - https://github.com/SonarSource/sonar-jacoco

© www.soinside.com 2019 - 2024. All rights reserved.