如何排除JaCoCo覆盖率报告中src-gen目录下同名包的类?
问题原因
你当前的JaCoCo配置无效,核心原因是:JaCoCo的excludes参数匹配的是编译后的.class文件路径,而非源码目录路径。
因为你的src/main/java和src/main/src-gen下的类编译后都会输出到同一个target/classes/com/chintan/project/目录中,源码目录的层级信息在编译后已经丢失,所以用**/src-gen/**/*这种源码路径规则根本匹配不到任何编译后的类,自然无法排除。
解决方法
针对你的场景,推荐以下几种可行方案:
方案1:按生成类的命名规则排除(最简便)
如果src-gen下的生成类有统一命名规律(比如后缀是Generated、前缀是Auto等),直接匹配类文件名:
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.11</version> <executions> <execution> <id>jacoco-prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> <!-- 如果不想给生成类插桩,这里也加排除 --> <configuration> <excludes> <exclude>**/*Generated.class</exclude> </excludes> </configuration> </execution> <execution> <id>jacoco-report</id> <phase>test</phase> <goals> <goal>report</goal> </goals> <configuration> <excludes> <exclude>**/*Generated.class</exclude> </excludes> </configuration> </execution> </executions> </plugin>
方案2:通过注解排除(精准)
如果生成类带有特定注解(比如javax.annotation.Generated或自定义注解),可以直接通过注解类排除:
<excludes> <exclude>@javax.annotation.Generated</exclude> </excludes>
如果生成工具默认没加注解,你可以在代码生成配置里添加注解,或者通过编译插件(比如maven-compiler-plugin)给src-gen下的类批量添加注解。
方案3:反向包含指定类(兜底方案)
如果上述两种方法都无法实现,只能反向控制——明确指定只包含src/main/java下的类。比如你可以通过类名前缀/后缀区分,或者手动列出需要包含的类(适合类数量少的场景):
<configuration> <includes> <!-- 假设非生成类没有特定前缀,生成类以G开头,这里只包含非G开头的类 --> <include>**/com/chintan/project/[!G]*.class</include> </includes> </configuration>
内容的提问来源于stack exchange,提问作者Chintan Jagad
相关产品推荐
相关产品推荐

