【问题标题】:JaCoCo: exclude generated methods (using it with Lombok)JaCoCo:排除生成的方法(与 Lombok 一起使用)
【发布时间】:2015-04-08 17:01:38
【问题描述】:

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

【问题讨论】:

    标签: jacoco lombok jacoco-maven-plugin


    【解决方案1】:

    自 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 版。

    【讨论】:

    • 我希望我们可以在 build.gradle 中配置它并避免在我们的 repos 中保留另一个文件。
    【解决方案2】:

    使用 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 应该将其过滤掉,但这是一个缺失的功能。
    • @ArneBurmeister 那是因为@Generated 具有保留 == SOURCE 但 JaCoCo 仅分析字节码,因此缺少该信息。
    • @namero999 你是对的,监督,但是注释过滤器会很棒,因为 lombok 添加了自己的 lombok.Generated 注释(不是来自 javax.annotation 的注释)。
    • Jacoco 现在可以做这个了,看看:github.com/jacoco/jacoco/pull/513(已经合并到master)
    • 现在不仅有Lombok特定的解决方案,这种方法会导致需要测试的类没有被测试。
    【解决方案3】:

    正如已经回答的那样,在项目的根目录中添加 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 忽略此自动生成的文件。

    【讨论】:

      猜你喜欢
      • 2021-07-04
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 2019-05-20
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多