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 находится ниже или рядом с этим файлом.