JaCoCo: исключить сгенерированные методы (используя его с Lombok)

Я использую JaCoCo, и он рассматривает методы, сгенерированные Lombok (сгенерированные в байт-коде, а не их след в исходном коде). Как я могу настроить JaCoCo, чтобы игнорировать их?

4 ответа

Решение

Используйте тег исключений, предоставленный Jacoco.

            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.7.4.201502262128</version>
            <configuration>
                <excludes>
                    <exclude>**/config/**</exclude>
                    <exclude>**/model/**</exclude>
                    <exclude>**/item/**</exclude>
                </excludes>
            </configuration>

Также еще один способ исключить сгенерированные классами lombok начиная с jacoco 0.8.0 и lombok 1.16.14 см. https://www.rainerhahnekamp.com/en/ignoring-lombok-code-in-jacoco/

К счастью, начиная с версии 0.8.0, Jacoco может обнаруживать, идентифицировать и игнорировать код, сгенерированный Lombok. Единственное, что вы, как разработчик, должны сделать, это создать файл с именем lombok.config в корне вашего каталога и установите следующий флаг:

lombok.addLombokGeneratedAnnotation = true

Это добавляет аннотацию lombok.@Generated в соответствующие методы, классы и поля. Jacoco знает об этой аннотации и будет игнорировать этот аннотированный код.

Пожалуйста, имейте в виду, что вы требуете как минимум версии 0.8.0 от Jacoco и версии 1.16.14 от Lombok.

Как уже было сказано, добавление lombok.configв корневом каталоге проекта решает проблему, но если вы используете Maven и не хотите добавлятьlombok.configв свой репозиторий, вы можете использовать плагин Apache Maven AntRun, чтобы автоматически сгенерировать его при сборке:

<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 игнорировать этот автоматически созданный файл.

Чтобы это исправить, нам нужен способ сказать JaCoCo игнорировать код, сгенерированный ломбоком. Это возможно, если дать команду lombok аннотировать все сгенерированные методы @lombok.generated, который JaCoCo будет автоматически игнорировать.

Создайте файл lombok.config со следующим:

      # This tells lombok this directory is the root,
# no need to look somewhere else for java code.
config.stopBubbling = true
# This will add the @lombok.Generated annotation
# to all the code generated by Lombok,
# so it can be excluded from coverage by jacoco.
lombok.addLombokGeneratedAnnotation = true

И поместите его либо в корень вашего репозитория, либо в папку src/. Единственное требование — весь код с аннотациями Lombok находится ниже или рядом с этим файлом.

Другие вопросы по тегам