运行IOUFlowTests.kt时遇java.lang.NoClassDefFoundError错误求助
你在运行Corda官方CorDapp示例的Kotlin Flow测试时遇到的核心问题是java.lang.NoClassDefFoundError: org/apache/commons/collections4/map/LRUMap,这说明你的测试环境缺少了Apache Commons Collections4这个依赖库。下面是具体的解决步骤:
错误原因分析
这个错误是由于Corda的测试框架在初始化CordappLoader时需要用到LRUMap类,但该类属于Apache Commons Collections4库,而你的项目测试依赖中没有包含它,导致JVM找不到这个类。那些关于WindowsAnsiOutputStream的WARN日志只是Jansi库的小问题,不会影响测试执行,可以忽略。
解决方案
1. 通过Gradle添加依赖(推荐)
CorDapp示例默认使用Gradle构建,你只需要在项目根目录或模块的build.gradle文件中,找到dependencies代码块,添加测试依赖:
testImplementation 'org.apache.commons:commons-collections4:4.4'
添加完成后,打开终端(Windows可以用PowerShell或CMD),进入项目根目录,执行以下命令重新构建并运行测试:
gradlew clean test
2. IntelliJ中同步依赖并清除缓存
如果你是直接在IntelliJ IDEA中运行测试:
- 先点击IntelliJ右上角的「Refresh all Gradle projects」按钮(刷新箭头样式的图标),确保Gradle拉取到新添加的依赖。
- 如果还是不行,尝试清除IntelliJ的缓存:点击
File -> Invalidate Caches...,选择「Invalidate and Restart」,重启IDE后再重新运行测试。
3. 手动添加依赖包(备选)
如果Gradle同步有问题,你可以手动下载Apache Commons Collections4的jar包(推荐版本4.4,兼容你的Java 8环境),然后将jar包添加到项目的测试类路径中:
- 在IntelliJ中右键点击项目 ->
Open Module Settings->Libraries-> 点击加号添加下载好的jar包,确保它被标记为「Test」范围。
额外说明
你的Java版本(1.8.0_172)和Javac版本都是符合Corda CorDapp示例要求的,不需要调整版本。只要解决了依赖缺失的问题,测试就能正常运行。
内容的提问来源于stack exchange,提问作者Clyde D'Cruz

