JaCoCo无法忽略Lombok生成代码问题求助
解决JaCoCo统计Lombok生成代码覆盖率为0的问题
以下是几个经过验证的可行解决方案,按优先级尝试:
1. 确保lombok.config配置正确且生效
- 把
lombok.config放在项目根目录(和pom.xml/settings.gradle同级),内容必须包含:config.stopBubbling = true lombok.addLombokGeneratedAnnotation = true - 解释:
config.stopBubbling避免父目录的配置覆盖当前设置,lombok.addLombokGeneratedAnnotation会让Lombok给所有生成的方法(getter/setter/Builder等)加上@lombok.Generated注解,JaCoCo默认会忽略带该注解的代码。 - 关键操作:修改配置后,必须执行clean + 重新编译,否则旧的编译产物不会应用新配置。
2. 让JaCoCo明确识别Lombok的@Generated注解
部分JaCoCo版本默认只识别javax.annotation.Generated,需要显式配置兼容lombok.Generated:
Maven项目配置(jacoco-maven-plugin)
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.10</version> <!-- 推荐使用0.8.7+版本 --> <configuration> <!-- 可选:直接排除Lombok生成的内部类,比如Builder --> <excludes> <exclude>**/*$Builder*</exclude> <exclude>**/*$Lombok*</exclude> </excludes> <!-- 配置识别Lombok的Generated注解 --> <rules> <rule> <element>CLASS</element> <excludes> <exclude>@lombok.Generated</exclude> </excludes> </rule> <rule> <element>METHOD</element> <excludes> <exclude>@lombok.Generated</exclude> </excludes> </rule> </rules> </configuration> </plugin>
Gradle项目配置
jacoco { toolVersion = "0.8.10" } jacocoTestReport { afterEvaluate { // 排除Lombok生成的Builder等内部类 classDirectories.setFrom(files(classDirectories.files.collect { fileTree(dir: it, exclude: [ "**/*$Builder*", "**/*$Lombok*" ]) })) } reports { xml.required = true html.required = true } }
3. 升级Lombok和JaCoCo版本
旧版本的Lombok和JaCoCo存在兼容性问题,导致注解识别失效:
- Lombok版本升级到1.18.20+
- JaCoCo版本升级到0.8.7+
新版本对注解的处理逻辑更完善,能大概率解决配置不生效的问题。
4. 兜底方案:用SuppressWarnings让JaCoCo忽略生成代码
如果以上方法都无效,在lombok.config中添加:
lombok.addSuppressWarnings = jacoco.exclude
Lombok会给所有生成的方法加上@SuppressWarnings("jacoco.exclude"),JaCoCo会自动忽略这些方法的覆盖率统计。
内容的提问来源于stack exchange,提问作者8u3631984
相关产品推荐
相关产品推荐

