IntelliJ运行Cordapp-example失败,命令行runnodes正常,报RPC连接错误
我之前也碰到过一模一样的情况——命令行跑runnodes完全正常,但在IntelliJ里启动就报ActiveMQ连接失败的错。这种问题基本都是IDE的运行环境和命令行环境不一致导致的,咱们一步步来排查解决:
1. 核对IntelliJ的运行配置参数
命令行的runnodes脚本会自动帮我们处理节点的端口分配、配置文件加载这些细节,但IntelliJ手动运行时很容易漏掉关键参数:
- 打开Run/Debug配置,确保你选择的运行目标(比如
NodeDriver类)正确引用了项目根目录下的node.conf配置文件,或者在启动参数里指定了和命令行一致的--rpc-port等端口参数; - 检查运行配置的工作目录,必须和你执行
runnodes时的目录完全一致(也就是cordapp-example的根目录)。
2. 清理IDE缓存和构建文件
IntelliJ的缓存偶尔会抽风,导致依赖或配置加载异常:
- 点击
File > Invalidate Caches...,选择「Invalidate and Restart」重启IDE; - 手动删掉项目根目录下的
build文件夹,然后在命令行执行./gradlew clean build(Windows用gradlew.bat clean build),重新构建后再尝试在IntelliJ里运行。
3. 检查目标端口的占用情况
错误里提到的端口是10013,大概率是这个端口在IntelliJ运行时被其他进程占了:
- Windows用户可以用命令检查:
netstat -ano | findstr :10013; - macOS/Linux用户用:
lsof -i :10013;
如果发现端口被占用,要么杀掉对应的进程,要么修改Cordapp节点配置里的RPC端口,保证和命令行运行时的端口一致。
4. 确保Gradle环境一致
有时候IntelliJ用的内置Gradle和你命令行用的版本不一样,也会导致奇怪的问题:
- 打开
File > Settings > Build, Execution, Deployment > Build Tools > Gradle,选择「Use Gradle from: 'gradle-wrapper.properties' file」,这样就能和命令行使用的Gradle版本保持统一了。
附你遇到的错误信息:
[INFO ] 16:14:44,014 [driver-pool-thread-0] (DriverDSLImpl.kt:169) internal.DriverDSLImpl.invoke - Exception while connecting to RPC, retrying to connect at localhost:10013 {} org.apache.activemq.artemis.api.core.ActiveMQNotConnectedException: AMQ119007: Cannot connect to server(s). Tried with all available servers. at org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:787) ~[artemis-core-client-2.2.0.jar:2.2.0] at net.corda.client.rpc....
内容的提问来源于stack exchange,提问作者Milind

