Corda 3运行模拟节点及Obligation CorDapp流测试时遇文件缺失异常
/nodes/0/node.conf缺失的异常 我来帮你搞定这个在Corda 3里碰到的java.nio.file.NoSuchFileException问题——不管是运行模拟节点还是跑Obligation CorDapp的流测试,都报找不到/nodes/0/node.conf,本质都是节点配置文件没生成或者路径没搞对,下面是具体的排查和解决步骤:
一、先确认节点生成流程是否正确
Corda的模拟节点不能直接启动,得先通过Gradle任务生成配置文件和节点目录。你需要先执行这个命令:
- Linux/macOS环境:在项目根目录运行
./gradlew deployNodes - Windows环境:运行
gradlew.bat deployNodes
这个任务会自动在项目的build/nodes目录下生成所有模拟节点的完整文件,包括每个节点对应的node.conf。要是你直接跳过这步就启动节点或者跑测试,肯定会报文件找不到的错。
二、检查路径配置是否正确
有时候代码里的路径写死错了,导致找错地方:
- 默认情况下,
deployNodes生成的节点都在build/nodes目录下,而不是项目根目录的nodes文件夹。如果你的启动代码或者测试代码里硬编码了/nodes/0/node.conf,得改成build/nodes/0/node.conf才行。 - 要是用了自定义的节点生成路径,要确保代码里的路径和实际生成的路径完全一致。
三、清理后重新生成节点
如果之前生成节点时中途出错,可能导致部分文件缺失,试试彻底清理后重新生成:
- 先清理旧的构建文件:Linux/macOS运行
./gradlew clean,Windows运行gradlew.bat clean - 再重新生成节点:
./gradlew deployNodes(或Windows对应命令) - 生成完成后,手动去
build/nodes/0目录下看看,确认node.conf文件存在。
四、针对Obligation CorDapp流测试的额外检查
流测试对节点初始化状态要求更高,还要注意这几点:
- 要是用了Corda的
MockNetwork来做测试,要确保测试类里正确配置了节点参数,要么让MockNetwork自动生成节点配置,要么指定正确的预生成节点路径。 - 检查IDE的测试任务配置,确保跑测试前已经自动执行了
deployNodes任务,避免测试提前启动时节点文件还没生成。
你遇到的具体异常栈:
java.nio.file.NoSuchFileException: /nodes/0/node.conf at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86) ~[?:1.8.0_161] at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) ~[?:1.8.0_161] at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) ~[?:1.8.0_161] at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java...
内容的提问来源于stack exchange,提问作者Joel

