【发布时间】:2015-04-08 17:01:38
【问题描述】:
我正在使用 JaCoCo,它正在考虑由 Lombok 生成的方法(在字节码中生成,而不是在源代码中跟踪它们)。 如何配置 JaCoCo 以忽略它们?
【问题讨论】:
标签: jacoco lombok jacoco-maven-plugin
我正在使用 JaCoCo,它正在考虑由 Lombok 生成的方法(在字节码中生成,而不是在源代码中跟踪它们)。 如何配置 JaCoCo 以忽略它们?
【问题讨论】:
标签: jacoco lombok jacoco-maven-plugin
自 jacoco 0.8.0 和 lombok 1.16.14 以来排除 lombok 生成的类的另一种方法。
幸运的是,从 0.8.0 版本开始,Jacoco 可以检测、识别和忽略 Lombok 生成的代码。作为开发人员,您唯一需要做的就是在您的目录根目录中创建一个名为 lombok.config 的文件并设置以下标志:
lombok.addLombokGeneratedAnnotation = true
这会将注解lombok.@Generated 添加到相关的方法、类和字段中。 Jacoco 知道这个注解并且会忽略那个注解的代码。
请记住,您至少需要 Jacoco 0.8.0 版和 Lombok v1.16.14 版。
【讨论】:
使用 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>
【讨论】:
@Builder,但不适用于@Data 生成的方法 - 仍在讨论中,请参阅github.com/jacoco/jacoco/wiki/FilteringOptions。由于 lombok 将@Generated 添加到生成的代码中,JaCoCo 应该将其过滤掉,但这是一个缺失的功能。
@Generated 具有保留 == SOURCE 但 JaCoCo 仅分析字节码,因此缺少该信息。
lombok.Generated 注释(不是来自 javax.annotation 的注释)。
正如已经回答的那样,在项目的根目录中添加 lombok.config 可以解决问题,但是 如果您使用的是 Maven 并且想要避免将 lombok.config 添加到您的存储库中,您可以使用Apache Maven AntRun Plugin 以便在构建时自动生成:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>lombok-config</id>
<phase>initialize</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<propertyfile file="lombok.config">
<entry key="config.stopBubbling" value="true" />
<entry key="lombok.addLombokGeneratedAnnotation" value="true" />
</propertyfile>
</target>
</configuration>
<?m2e execute?> <!-- Optional: enable this execution in Eclipse -->
</execution>
</executions>
</plugin>
</plugins>
不要忘记指示您的 SCM 忽略此自动生成的文件。
【讨论】: