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

Corda 3运行runNodes启动节点时遇Quasar及反射访问异常求助

解决Corda 3执行runNodes启动节点时的两类问题

我来帮你搞定在Corda 3环境里跑runNodes启动节点时遇到的这两个麻烦——Quasar ClassReader异常和非法反射访问警告,这俩都是Corda 3和高版本JDK不兼容导致的常见问题,下面分别给你对应的解决方案:

一、Quasar ClassReader异常

这个异常的核心原因是Corda 3自带的Quasar版本和JDK9及以上的字节码格式不兼容,Quasar在解析新字节码指令时会抛出错误。这里有两个解决思路:

  • 最稳妥的方案:切换到JDK8运行
    Corda 3官方推荐的运行环境就是JDK8,完全适配不会有这类兼容性问题。你可以:

    • 在IDE里把项目的JDK版本设置为1.8;
    • 或者在命令行执行runNodes前指定JDK8的路径:
      # Linux/macOS
      JAVA_HOME=/path/to/jdk8 ./gradlew runNodes
      # Windows
      set JAVA_HOME=C:\path\to\jdk8 && gradlew runNodes
      
  • 适配JDK9+:升级Quasar版本
    如果必须用高版本JDK,可以升级Quasar到兼容JDK9+的版本。在你的cordapp项目的build.gradle里,修改Quasar的依赖:

    dependencies {
        // 替换原有的Quasar依赖
        cordaCompile "org.quasar-analytics:quasar-core:0.7.11"
    }
    

    修改后执行./gradlew clean build runNodes重新构建运行。

二、非法反射访问警告

你看到的那段警告是因为Corda 3用来打包节点的Capsule工具,在访问JMX内部字段com.sun.jmx.mbeanserver.JmxMBeanServer.mbsInterceptor时,违反了JDK9+的模块系统规则。解决方法如下:

  • 用JDK8规避
    同样,JDK8没有模块系统,直接用它运行节点就不会出现这个警告。

  • 给JVM添加授权参数(JDK9+适用)
    你可以通过指定JVM参数允许这个反射访问,从而抑制警告:

    • 方法一:在项目的gradle.properties里添加一行配置:
      cordaJvmArgs=--add-opens java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED
      
    • 方法二:执行runNodes时直接传递参数:
      # Linux/macOS
      ./gradlew runNodes -PcordaJvmArgs="--add-opens java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED"
      # Windows
      gradlew runNodes -PcordaJvmArgs="--add-opens java.management/com.sun.jmx.mbeanserver=ALL-UNNAMED"
      

额外建议

Corda 3已经是停止维护的旧版本了,长期使用的话建议升级到Corda 4或更高版本,这些新版本对高版本JDK的兼容性更好,能避免很多这类底层兼容性问题。

内容的提问来源于stack exchange,提问作者Joel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:20:59