如何在JaCoCo、EclEmma中排除代码包?配置不生效求助
解决JaCoCo/EclEmma配置不生效的问题
我来帮你梳理下可能的问题点和解决方向,你遇到的是JaCoCo与EclEmma配置不匹配导致过滤规则失效的典型情况,咱们一步步排查:
1. 检查Maven配置的层级与路径格式
很多时候配置不生效是因为<includes>/<excludes>放错了位置,或者路径格式不对:
- 首先,这些过滤规则必须放在JaCoCo插件的
<configuration>节点下,而且要对应到report执行阶段(因为EclEmma会参考Maven生成的覆盖率报告规则) - 路径要使用
/分隔包名,并且用**匹配递归子包(你原来的*只能匹配当前包下的类,子包不会被包含) - 另外你配置里同时包含又排除了
com.cfgh.repository.*,这是冲突的,得明确到底要包含还是排除
给你一个正确的配置示例:
<plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.10</version> <!-- 建议使用稳定版本 --> <executions> <execution> <id>prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>report</id> <goals> <goal>report</goal> </goals> <configuration> <!-- 报告阶段的过滤规则,EclEmma会参考这个配置 --> <includes> <include>com/cfgh/controller/**</include> <include>com/cfgh/service/**</include> <!-- 如果你想包含repository,就去掉下面exclude里的对应项;否则删掉这行 --> <!-- <include>com/cfgh/repository/**</include> --> </includes> <excludes> <exclude>com/cfgh/config/**</exclude> <exclude>com/cfgh/model/dto/**</exclude> <exclude>com/cfgh/model/entity/**</exclude> <exclude>com/cfgh/repository/**</exclude> <exclude>com/cfgh/exception/handler/**</exclude> </excludes> </configuration> </execution> </executions> </plugin>
2. 检查EclEmma的本地配置是否覆盖了Maven规则
EclEmma在Eclipse中有独立的设置,可能会忽略Maven的配置:
- 打开Eclipse的
Window > Preferences > Java > Code Coverage,查看是否有自定义的全局过滤规则 - 右键你的项目,选择
Coverage As > Coverage Configurations,找到对应的JUnit配置,切换到Coverage标签:- 确认是否勾选了“Use Maven build configuration”(不同版本选项 wording 可能略有不同,找关联Maven的选项)
- 如果有手动添加的includes/excludes,要么删除让它继承Maven配置,要么手动同步你的规则
3. 清理缓存并重新构建
旧的编译文件或JaCoCo缓存可能导致配置不生效:
- 先执行Maven命令:
mvn clean jacoco:report,生成新的覆盖率报告,查看target/site/jacoco下的报告是否已经正确过滤了类 - 在Eclipse中执行
Project > Clean,然后重新运行JUnit的Coverage,确保使用的是最新的构建结果
4. 确认版本兼容性
如果你的EclEmma版本较旧,可能和新版本的JaCoCo插件不兼容:
- 可以查看EclEmma的官方说明,匹配对应的JaCoCo插件版本(比如EclEmma 3.1.x对应JaCoCo 0.8.9左右)
- 尝试调整JaCoCo插件的版本,再重新测试
内容的提问来源于stack exchange,提问作者Ruchita J
相关产品推荐
相关产品推荐

