JaCoCo:排除生成的方法(与Lombok一起使用)

Fed*_*tti 19 lombok jacoco jacoco-maven-plugin

我正在使用JaCoCo,它正在考虑Lombok生成的方法(在字节码中生成,而不是源代码中的跟踪).如何配置JaCoCo忽略它们?

小智 31

自jacoco 0.8.0和lombok 1.16.14以来另一种排除lombok生成的类的方法见:https://www.rainerhahnekamp.com/en/ignoring-lombok-code-in-jacoco/

幸运的是,从版本0.8.0开始,Jacoco可以检测,识别和忽略Lombok生成的代码.您作为开发人员唯一要做的就是创建一个lombok.config在目录根目录中命名的文件并设置以下标志:

lombok.addLombokGeneratedAnnotation = true
Run Code Online (Sandbox Code Playgroud)

这会将注释添加lombok.@Generated到相关的方法,类和字段中.Jacoco知道这个注释,并会忽略带注释的代码.

请记住,您至少需要0.8.0版本的Jacoco和v1.16.14 of Lombok.

  • 我希望我们可以在build.gradle中配置它,避免在我们的存储库中留下另一个文件。 (5认同)
  • 提醒一下,这可以节省我的时间,必须重新生成代码。在eclipse中使用project clean,在maven用户mvn clean中... (4认同)

小智 5

使用 jacoco 提供的 excludes 标签。

            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.7.4.201502262128</version>
            <configuration>
                <excludes>
                    <exclude>**/config/**</exclude>
                    <exclude>**/model/**</exclude>
                    <exclude>**/item/**</exclude>
                </excludes>
            </configuration>
Run Code Online (Sandbox Code Playgroud)

  • 这仅部分起作用,因为那些排除过滤器仅过滤器类。我认为您不仅会排除类,还会排除所有生成的代码。应该适用于`@Builder`,但不适用于`@Data` 生成的方法 - 仍在讨论中,请参阅 https://github.com/jacoco/jacoco/wiki/FilteringOptions。由于 lombok 将 `@Generated` 添加到生成的代码中,JaCoCo 应该过滤掉它,但这是一个缺失的功能。 (3认同)
  • @ArneBurmeister 那是因为 `@Generated` 具有保留 == SOURCE 但 JaCoCo 仅分析字节码,因此缺少该信息。 (2认同)
  • Jacoco现在可以这样做了,看看:https://github.com/jacoco/jacoco/pull/513(已经合并到master了) (2认同)