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

时间:2019-03-13 19:07:29

标签: sonarqube jacoco

我正在使用Lombok 1.18.2和JaCoCo 0.8.3,它们在理论上可以识别/忽略lombok注释。我做了一个测试,在lombok.addLombokGeneratedAnnotation = true中添加了lombok.config参数,然后在目标类中看到了生成的注释,这些注释已反编译。

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

如果是这样,SonarQube如何才能聪明地使用它,如果通过将其指向jacoco.exec文件,则仅包含有关总/命中探测的信息?声纳如何分辨其中一个探头与龙目岛有关?

1 个答案:

答案 0 :(得分:2)

  

我正在使用Lombok 1.18.2和JaCoCo 0.8.3,它们在理论上可以识别/忽略lombok注释。

从理论上讲不是practically

不是“忽略lombok注释”,而是用@lombok.Generated注释的方法,甚至是0.8.3 changelog中更精确的引用条目:

  

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


  

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

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

  

如果是这样,SonarQube如何才能聪明地使用它,如果通过将其指向jacoco.exec文件,则仅包含有关总/命中探测的信息?声纳如何分辨其中一个探头与龙目岛有关?

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插件和命令行界面)提供Java 11支持和新的过滤器,

     直接读取exec文件(不是最终报告)并将JaCoCo嵌入为生成报告库的

工具将提供分析Java 11类文件并仅在它们更新到此版本的JaCoCo后使用新过滤器的功能。 。   因此,请关注/等待/等各个供应商,例如

     

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