如何为依赖CorDapp类的独立及RPC Corda客户端引入依赖?
嘿,针对你开发的这两类Corda客户端,我来给你拆解下具体怎么引入依赖,分两种情况说的明明白白:
1. 依赖CorDapp类的独立Corda客户端
这类客户端因为要直接用到CorDapp里的状态、合约、甚至流的类,属于和CorDapp强耦合的场景,依赖引入可以这么做:
- 如果你的客户端和CorDapp是多模块项目,直接在客户端模块的
build.gradle里添加本地模块依赖:
dependencies { // 替换成你的CorDapp模块名称 implementation project(':your-cordapp-module') // 别忘了引入Corda核心依赖,版本要和节点一致 implementation 'net.corda:corda-core:4.9' implementation 'net.corda:corda-node-api:4.9' }
- 如果CorDapp已经发布到本地仓库或者内部私服,就用坐标引入:
dependencies { implementation 'com.yourcompany:your-cordapp:1.0.0' implementation 'net.corda:corda-core:4.9' implementation 'net.corda:corda-node-api:4.9' }
运行前记得用shadowJar插件把所有依赖打包成一个fat jar,不然运行时会出现类找不到的问题。
2. 依赖独立CorDapp状态类的Corda RPC客户端
这类客户端是通过RPC和节点交互,但需要CorDapp的状态类来序列化/反序列化数据,这里更推荐抽离共享模块的方式,避免引入冗余代码:
- 先把CorDapp中需要共享的状态、合约、常量等类,抽成一个独立的
cordapp-contracts-states模块,这个模块只依赖Corda Core,不要包含流、节点逻辑这些不需要客户端用到的代码。 - 在RPC客户端的
build.gradle里引入这个共享模块和Corda RPC依赖:
dependencies { // 引入共享的状态合约模块 implementation 'com.yourcompany:cordapp-contracts-states:1.0.0' // Corda RPC核心依赖,版本必须和节点匹配 implementation 'net.corda:corda-rpc:4.9' }
要是暂时没法抽离共享模块,也可以直接引入整个CorDapp的依赖,但不建议这么做——会把流的代码、节点依赖都带进来,不仅增大客户端体积,还可能引发依赖冲突。
通用注意事项
- 版本一致性:客户端用的所有Corda依赖版本,必须和节点运行的Corda版本完全一致,不然会出现序列化失败、RPC通信异常等问题。
- 序列化配置:确保你的状态类已经正确实现
ContractState,并且添加了@CordaSerializable注解,不然客户端没法正确解析节点返回的数据。 - 打包运行:不管是哪种客户端,都可以用Gradle的
shadowJar插件打包成可执行的fat jar,或者用application插件生成直接运行的脚本。
内容的提问来源于stack exchange,提问作者Joel
相关产品推荐
相关产品推荐

