Jacoco nodeps依赖下ClassNotFound com.vladium.emma.rt.RT问题排查
问题排查结果
核心原因
- 类归属错误:你尝试加载的
com.vladium.emma.rt.RT是老旧覆盖率工具Emma的专属类,Jacoco作为Emma的官方替代产品,整个代码库完全没有这个命名空间下的类,自然会抛出ClassNotFoundException。如果是从Emma迁移到Jacoco的旧项目,所有反射调用Emma类的代码都要全部替换。 - 依赖范围不匹配:当前你配置的
jacocoAnt、根目录构建脚本的classpath Jacoco依赖,都属于Gradle构建阶段的工具类路径,只会在执行编译、覆盖率报告生成等构建任务时生效,不会被打包到androidTest测试包的运行时类路径中,就算是Jacoco自身的运行时类,没有额外配置也会找不到。 - 版本冲突:根目录声明的Jacoco版本是0.8.2,subproject.main模块的jacocoAnt强制指定了0.8.1,版本不一致会额外增加类兼容性问题的概率。
修复步骤
- 删掉所有反射调用Emma类的代码,如果是要在运行时获取Jacoco覆盖率数据,改用Jacoco对应API,目标类为
org.jacoco.agent.rt.RT - 统一所有Jacoco依赖版本,把subproject.main模块的jacocoAnt依赖版本改为和根目录一致的0.8.2
- 如果确实需要在androidTest运行时调用Jacoco API,给subproject.main模块添加如下依赖,将Jacoco运行时打包到测试包中:
dependencies { androidTestImplementation "org.jacoco:org.jacoco.agent:$jacocoVersion:runtime" }
内容的提问来源于stack exchange,提问作者Xiaowen Zhang
相关产品推荐
相关产品推荐

