You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 09:18:21