Я использую JaCoCo, и он рассматривает методы, созданные Lombok (сгенерированные в байт-коде, а не их след в исходном коде). Как я могу настроить JaCoCo на их игнорирование?
JaCoCo: исключить сгенерированные методы (используя его с Lombok)
Ответы (3)
Используйте тег excludes, предоставленный 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>
@Builder
, но не для методов, созданных @Data
- все еще обсуждается, см. github.com/jacoco / jacoco / wiki / FilteringOptions. Поскольку lombok добавляет @Generated
к сгенерированному коду, JaCoCo должен отфильтровать это, но это отсутствующая функция.
- person Arne Burmeister; 23.06.2016
@Generated
имеет retention == SOURCE, но JaCoCo анализирует только байт-код, поэтому эта информация отсутствует.
- person namero999; 07.07.2016
lombok.Generated
(не ту из javax.annotation
).
- person Arne Burmeister; 07.07.2016
Также еще один способ исключить классы, созданные 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 и v1.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 игнорировать этот автоматически созданный файл.