runnodes 时发生了非法的反射访问操作

An illegal reflective access operation has occurred when runnodes

我正在尝试 运行 我的 corda 节点,但我遇到了一个奇怪的问题,节点正在正确启动,正如您在日志中看到的那样

C:\Repositorio\cordapp-template-kotlin\build\nodes>runnodes --log-to-console --logging-level=DEBUG
Starting nodes in C:\Repositorio\cordapp-template-kotlin\build\nodes
Starting corda.jar in C:\Repositorio\cordapp-template-kotlin\build\nodes\Notary on debug port 5005
Starting corda.jar in C:\Repositorio\cordapp-template-kotlin\build\nodes\PartyA on debug port 5006
Starting corda-webserver.jar in C:\Repositorio\cordapp-template-kotlin\build\nodes\PartyA on debug port 5007
Starting corda.jar in C:\Repositorio\cordapp-template-kotlin\build\nodes\PartyB on debug port 5008
Starting corda-webserver.jar in C:\Repositorio\cordapp-template-kotlin\build\nodes\PartyB on debug port 5009
Started 5 processes
Finished starting nodes

然而,当它打开 5 个控制台以实际 运行 Web 服务和节点时,它就发生了。

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by Capsule (file:/C:/Repositorio/cordapp-template-kotlin/build/nodes/PartyB/corda.jar) to field com.sun.jmx.mbeanserver.JmxMBeanServer.mbsInterceptor
WARNING: Please consider reporting this to the maintainers of Capsule
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Listening for transport dt_socket at address: 5008
[quasar] ERROR: java/lang/Thread
java.lang.IllegalArgumentException
        at co.paralleluniverse.asm.ClassReader.<init>(Unknown Source)
        at co.paralleluniverse.asm.ClassReader.<init>(Unknown Source)
        at co.paralleluniverse.asm.ClassReader.<init>(Unknown Source)
        at co.paralleluniverse.fibers.instrument.MethodDatabase.checkFileAndClose(MethodDatabase.java:344)
        at co.paralleluniverse.fibers.instrument.MethodDatabase.checkClass(MethodDatabase.java:324)
        at co.paralleluniverse.fibers.instrument.MethodDatabase.getOrLoadClassEntry(MethodDatabase.java:183)
        at co.paralleluniverse.fibers.instrument.MethodDatabase.isMethodSuspendable0(MethodDatabase.java:194)
        at co.paralleluniverse.fibers.instrument.MethodDatabase.isMethodSuspendable(MethodDatabase.java:161)
        at co.paralleluniverse.fibers.instrument.InstrumentMethod.isSuspendableCall(InstrumentMethod.java:231)
        at co.paralleluniverse.fibers.instrument.LabelSuspendableCallSitesClassVisitor.visitMethodInsn(LabelSuspendableCallSitesClassVisitor.java:64)
        at co.paralleluniverse.asm.ClassReader.a(Unknown Source)
        at co.paralleluniverse.asm.ClassReader.b(Unknown Source)
        at co.paralleluniverse.asm.ClassReader.accept(Unknown Source)
        at co.paralleluniverse.asm.ClassReader.accept(Unknown Source)
        at co.paralleluniverse.fibers.instrument.QuasarInstrumentor.instrumentClass(QuasarInstrumentor.java:123)
        at co.paralleluniverse.fibers.instrument.QuasarInstrumentor.instrumentClass(QuasarInstrumentor.java:94)
        at co.paralleluniverse.fibers.instrument.JavaAgent$Transformer.transform(JavaAgent.java:209)
        at java.instrument/java.lang.instrument.ClassFileTransformer.transform(Unknown Source)
        at java.instrument/sun.instrument.TransformerManager.transform(Unknown Source)
        at java.instrument/sun.instrument.InstrumentationImpl.transform(Unknown Source)
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
        at java.base/java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(Unknown Source)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(Unknown Source)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(Unknown Source)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
        at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
        at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(Unknown Source)
        at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallPremain(Unknown Source)
[quasar] ERROR: java/lang/Thread
java.lang.IllegalArgumentException
        at co.paralleluniverse.asm.ClassReader.<init>(Unknown Source)
        at co.paralleluniverse.asm.ClassReader.<init>(Unknown Source)
        at co.paralleluniverse.asm.ClassReader.<init>(Unknown Source)
        at co.paralleluniverse.fibers.instrument.MethodDatabase.checkFileAndClose(MethodDatabase.java:344)
        at co.paralleluniverse.fibers.instrument.MethodDatabase.checkClass(MethodDatabase.java:324)

控制台打印屏幕:

有没有人遇到过同样的问题?我不知道如何调试它。

你是 运行 Java 10. Corda 仅在 Oracle JDK 8 JVM 的 8u131+ 版本上受支持。

您可以在此处查看所需的 Java 版本:https://docs.corda.net/getting-set-up.html

File > Project Structure... to 1.8.0_242下更改Project SDK后,您可能还需要unlinklink Gradle 再次通过:

  1. 右键单击 Gradle window 上的 Gradle 项目,然后单击 Unlink Gradle Project
  2. 转到File > Close Project
  3. 再次打开您当前的项目,您将看到一条消息IntelliJ IDEA found a Gradle build script
  4. 点击下方的Import Gradle Project等待完成。

我写这篇文章是因为我不小心在 Java 11 环境中导入了 Gradle。但是,在更改项目 SDK 后,由于 java.lang.IllegalArgumentException 错误,我仍然无法 运行 单元测试。