android - 使用 Gradle 任务运行单元测试时出现 NoClassDefFoundError
问题描述
我有一个使用动态功能模块的项目,我想通过 gradle 任务在功能模块中运行我的单元测试(出于我的 CI 目的):
./gradlew :feature_product:test
但它总是为我NoClassDefFoundError
提供依赖于基本模块中的类的测试:
com.example.android.feature.product.ProductViewTest > on vote change to negative FAILED
java.lang.NoClassDefFoundError: app.BaseView
ProductView
功能模块中的类从BaseView
基本模块扩展而来。
奇怪的是,它在 Android Studio 中运行时成功,它工作正常。
然后,当我通过命令行运行和运行 Android Studio 时,我注意到日志中有一些不同的地方。Android Studio 中的第一行是generateDebugSources
,我运行时没有的东西./gradlew test
Executing tasks: [:lib_ui:generateDebugSources, ...]
我该如何解决?./gradlew test
当我按 Ctrl+Shift+R 时,Android Studio 是否具有与提供的命令不同的命令?
解决方案
在进一步搜索此问题后,我发现它也在android-test和app-bundle-samples项目中报告,并且问题跟踪器中也存在问题。
事实证明,根据问题跟踪器中的评论,此问题已在 Android Gradle 插件 4.1.0 中修复。
如果您不想将 AGP 更新到仍处于 alpha 阶段的 4.1.0,请将其添加到功能模块的 build.gradle 为我解决了这个问题,根据此评论:
testRuntimeOnly(files("$projectDir/../b_app/build/intermediates/app_classes/debug/classes.jar"))
推荐阅读
- java - Java swing setSize 仅适用于 EventListner
- jquery - 获取html表格行的所有输入值
- c - 如何在 C 程序中从十六进制字符串中提取值?
- android - Android资源失败求助meee
- angular - 使用 observable 从服务器获取 map() 和 filter() 数据
- ubuntu - 如何在 Ubuntu 上重置防火墙规则?
- javascript - 节点 MongoDB RangeError:超出最大调用堆栈大小
- python - Python Regex re.search - groupdict() - 日期格式匹配
- java - 从 Java 8 迁移到 Java 11 后出现 Drools 错误
- python - 如何在具有多个唯一图形的布局上实现 Dash/Plotly 清单持久性?