从声纳覆盖报告中排除龙目岛类

最新的Jacoco插件(仍处于快照版本),具有一个很好的新功能来过滤掉龙目岛生成的代码(https://github.com/jacoco/jacoco/wiki/FilteringOptions)。我们需要做的就是在存储库的根目录下添加一个文件:0.7.10-SNAPSHOTlombok.config

lombok.addLombokGeneratedAnnotation=true 

当我在内部生成Jacoco报告时,我看到了差异。但是,当我的常规质量作业执行并将结果发布到Sonar时,我得到不同的(即更糟的)结果。

为什么我在本地报告和声纳中没有相同的结果?有什么解决方法吗?


答案 1

如前所述:https://github.com/jacoco/jacoco/pull/513#issuecomment-293176354

过滤是在报告生成(创建 html、xml 等)时执行的,而不是在收集执行信息(创建 exec 文件)时执行的。因此,直接读取执行数据而不是读取xml(这方面依赖于纯粹的内部中间格式是一种错误,但已完成)并创建自己的报告(例如SonarQube,Jenkins等)的工具将需要更新其对JaCoCo的依赖性,一旦发布,就可以过滤报告。我们将在发布时明确通知下游项目(特别是上面提到的所有项目)。所以再一次 - 请耐心等待。感谢您的理解。

我没有找到让Sonar阅读最终报告而不是exec文件的方法,所以我想我们需要耐心等待官方的0.7.10 jacoco插件发布,然后在Sonar方面进行更新!

------更新 2018年5月9日

新版本已经发布,我可以确认它对我有用。

用:

  • 声纳 6.7
  • SonarJava 插件 5.1.1.13214
  • jacoco maven plugin 0.8.1
  • lombok.addLombokGeneratedAnnotation=true in lombok.config

我现在得到了更好的覆盖率结果报告给Sonar,因为龙目岛生成的代码现在被忽略了。它确实有助于确定“真实”未覆盖区域是什么,以及它是否具有风险。


答案 2

首先,您必须检查您的龙目岛版本是否至少为1.16.14

pom.xml

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <scope>provided</scope>
    <version>1.16.14</version>
</dependency>

然后,您必须检查您的Jacoco版本是否至少为0.8.0

pom.xml

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.0</version>
    <!-- // -->
</plugin>

然后,您必须在项目的文件夹中添加一个文件(而不是在资源文件夹中)lombok.configsrc)

lombok.config

# tells Lombok that this is the root directory and that it shouldn’t search parent directories for more configuration files
config.stopBubbling = true
# tells Lombok to add @lombok.Generated annotation to all generated methods
lombok.addLombokGeneratedAnnotation = true

推荐