CordaApp创建MockNetwork运行单元测试报Liquibase类缺失错误
Corda单元测试Liquibase类缺失报错排查方案
问题场景
为Corda应用工作流编写单元测试用例时,初始化MockNetwork并执行./gradlew test命令运行测试,抛出Liquibase相关的类找不到错误。
测试代码
@Before public void setup() { network = new MockNetwork(new MockNetworkParameters().withCordappsForAllNodes(ImmutableList.of( TestCordapp.findCordapp("net.corda.tokenizeddemocracy.contracts"), TestCordapp.findCordapp("net.corda.tokenizeddemocracy.flows.KafkaFlows"))) .withNotarySpecs(ImmutableList.of(new MockNetworkNotarySpec(CordaX500Name.parse("O=Notary,L=London,C=GB")))) ); a = network.createPartyNode(null); b = network.createPartyNode(null); network.runNetwork(); }
控制台报错
liquibase/exception/LiquibaseException java.lang.NoClassDefFoundError: liquibase/exception/LiquibaseException at net.corda.node.internal.AbstractNode$startHikariPool$1.invoke(AbstractNode.kt:1024) at net.corda.node.internal.AbstractNode$startHikariPool$1.invoke(AbstractNode.kt:202) at net.corda.node.internal.AbstractNodeKt.startHikariPool(AbstractNode.kt:1343) at net.corda.node.internal.AbstractNode.startHikariPool(AbstractNode.kt:1023) at net.corda.node.internal.AbstractNode.startDatabase(AbstractNode.kt:1017) at net.corda.testing.node.internal.InternalMockNetwork$MockNode.startDatabase(InternalMockNetwork.kt:433) at net.corda.node.internal.AbstractNode.start(AbstractNode.kt:572) at net.corda.testing.node.internal.InternalMockNetwork$MockNode.start(InternalMockNetwork.kt:382) at net.corda.testing.node.internal.InternalMockNetwork.createNodeImpl(InternalMockNetwork.kt:501)
排查解决步骤
- 先确认依赖scope配置正确:这个报错的核心原因是测试运行时类路径下找不到Liquibase核心类。Corda 4.x及以上版本节点启动时会用Liquibase执行数据库表结构迁移,不要把
corda-node、corda-test-utils、corda-node-driver这类核心依赖的scope设为compileOnly或者testCompileOnly,测试模块需要用testImplementation引入上述依赖,保证运行时能加载到对应类。 - 排查依赖冲突和版本错位:执行
./gradlew dependencies --configuration testRuntimeClasspath输出测试运行时依赖树,搜索liquibase相关条目:- 如果存在多个不同版本的Liquibase被传递引入,或者Liquibase依赖被其他三方Cordapp排除,就在build.gradle中强制指定和当前Corda版本匹配的Liquibase版本,Corda 4.x系列对应兼容Liquibase 3.6.x版本,不要引入4.x以上版本,会出现类路径不兼容问题。
- 如果使用了Corda Tokens SDK、Accounts SDK等官方组件,要保证SDK版本和Corda核心版本完全对齐,比如Tokens SDK 1.2版本对应Corda 4.5+,版本错位会传递引入错误版本的依赖,甚至直接排除核心Liquibase包。
- 清理构建缓存重试:如果依赖配置确认没有问题,先执行
./gradlew clean清理项目构建产物,再执行测试,如果还是报错就删除本地Gradle缓存中org.liquibase对应的目录(路径一般是~/.gradle/caches/modules-2/files-2.1/org.liquibase/),重新执行构建下载完整依赖,排除依赖下载损坏、旧缓存类缺失的问题。 - 检查MockNetwork配置:不要给MockNetwork配置外部数据库连接参数,保持默认的内存H2数据库配置即可,错误的数据库配置会触发额外的Liquibase迁移逻辑,放大类缺失问题。
内容的提问来源于stack exchange,提问作者Puneet Jindal
相关产品推荐
相关产品推荐

