如何在Eclipse中用EclEmma统计URLClassLoader加载类的覆盖率?
解决EclEmma统计自定义URLClassLoader中类覆盖率的问题
EclEmma默认只跟踪系统类加载器与应用类加载器加载的类,所以自定义URLClassLoader加载的插件类会被遗漏,以下是具体解决方法:
1. 调整EclEmma运行配置的类加载器跟踪
在Eclipse中操作:
- 右键启动器项目,选择「Run As」→「Coverage Configurations」
- 切换到「Coverage」标签页,找到「Class Loaders」区域
- 勾选「Trace all class loaders」选项,让EclEmma尝试跟踪所有自定义类加载器
- 同时在「Inclusion/Exclusion Patterns」中添加插件项目的类路径规则,确保插件类被纳入统计范围
2. 确保插件类被纳入插桩范围
EclEmma依赖字节码插桩统计覆盖率,需保证插件类被正确处理:
- 针对插件项目,右键选择「Coverage As」→「Coverage Configurations」,确认项目已被添加到覆盖配置的项目列表中
- 如果插件是外部JAR包,要在启动器的运行配置「Classpath」标签页的「User Entries」中添加这些JAR,同时在EclEmma配置里勾选这些JAR的覆盖统计权限
3. 代码层面主动注册自定义类加载器(可选)
如果上述配置仍不生效,可在启动器代码中显式告知EclEmma跟踪自定义类加载器:
- 创建URLClassLoader实例后,调用
org.eclemma.runtime.Coverage.getRuntime().addClassLoader(classLoader) - 注意需确保EclEmma的runtime JAR已添加到启动器的类路径中
4. 验证统计结果
运行覆盖率测试后,在Eclipse的「Coverage」视图中点击「Show all elements」按钮,检查插件项目的类是否出现在统计列表中。若仍未出现,需排查插件类是否被正确加载,以及字节码是否被EclEmma成功插桩。
内容的提问来源于stack exchange,提问作者Horcrux7
相关产品推荐
相关产品推荐

