我使用的是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有什么关系?
我使用的是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
文件不是最终报告,它包含有关在类中插入的所有探针的原始信息。在生成报告(exec
和class
文件的分析)期间,即在执行report
JaCoCo Ant Task期间,过滤方法。
如果是这样,SonarQube如何巧妙地使用它,如果通过将其指向jacoco.exec文件,只有关于总/命中探针的信息? Sonar如何告诉其中一个探测器与lombok有什么关系?
SonarQube embeds JaCoCo as a library和use 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