有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Corda示例在尝试运行节点时失败

我读过a similar issue,但我的环境不同

我已经克隆了Corda样本,并确保我拥有Java 8(更新301)和Gradle 5.6.4:

cordapp-example % java -version              
java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)

cordapp-example % gradle -version

------------------------------------------------------------
Gradle 5.6.4
------------------------------------------------------------

Build time:   2019-11-01 20:42:00 UTC
Revision:     dd870424f9bd8e195d614dc14bb140f43c22da98

Kotlin:       1.3.41
Groovy:       2.5.4
Ant:          Apache Ant(TM) version 1.9.14 compiled on March 12 2019
JVM:          1.8.0_301 (Oracle Corporation 25.301-b09)
OS:           Mac OS X 10.16 x86_64

然而,当我遵循“运行示例Cordapp”tutorial时,我在runnodes步骤失败:

cordapp-example % bash -c 'cd "/Users/arinea/Munca/Corda/samples-java/Basic/cordapp-example/build/nodes/PartyB" ; "/Library/Java/JavaVirtualMachines/jdk-11.0.10.jdk/Contents/Home/bin/java" "-Dcapsule.jvm.args=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5007 -javaagent:drivers/jolokia-jvm-1.6.0-agent.jar=port=7007,logHandlerClass=net.corda.node.JolokiaSlf4jAdapter" "-Dname=PartyB" "-jar" "/Users/arinea/Munca/Corda/samples-java/Basic/cordapp-example/build/nodes/PartyB/corda.jar" && exit'
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by Capsule (file:/Users/arinea/Munca/Corda/samples-java/Basic/cordapp-example/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: 5007
[quasar] ERROR: java/lang/Object
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:345)
at co.paralleluniverse.fibers.instrument.MethodDatabase.checkClass(MethodDatabase.java:325)
at co.paralleluniverse.fibers.instrument.MethodDatabase.getOrLoadClassEntry(MethodDatabase.java:184)
at co.paralleluniverse.fibers.instrument.SimpleSuspendableClassifier.isSuspendable(SimpleSuspendableClassifier.java:156)
at co.paralleluniverse.fibers.instrument.DefaultSuspendableClassifier.isSuspendable(DefaultSuspendableClassifier.java:47)
at co.paralleluniverse.fibers.instrument.CheckInstrumentationVisitor.visitMethod(CheckInstrumentationVisitor.java:130)
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.MethodDatabase.checkFileAndClose(MethodDatabase.java:348)
at co.paralleluniverse.fibers.instrument.MethodDatabase.checkClass(MethodDatabase.java:325)
at co.paralleluniverse.fibers.instrument.MethodDatabase.getOrLoadClassEntry(MethodDatabase.java:184)
at co.paralleluniverse.fibers.instrument.MethodDatabase.isMethodSuspendable0(MethodDatabase.java:195)
at co.paralleluniverse.fibers.instrument.MethodDatabase.isMethodSuspendable(MethodDatabase.java:162)
at co.paralleluniverse.fibers.instrument.InstrumentMethod.isSuspendableCall(InstrumentMethod.java:231)
at co.paralleluniverse.fibers.instrument.LabelSuspendableCallSitesClassVisitor$1.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:129)
at co.paralleluniverse.fibers.instrument.QuasarInstrumentor.instrumentClass(QuasarInstrumentor.java:100)
at co.paralleluniverse.fibers.instrument.JavaAgent$Transformer.transform(JavaAgent.java:241)
at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:246)
at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:563)
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:398)
at java.base/sun.launcher.LauncherHelper.loadMainClass(LauncherHelper.java:760)
at java.base/sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:655)

仔细检查三个未通过的选项卡中的第一行后,我们看到:

... "/Library/Java/JavaVirtualMachines/jdk-11.0.10.jdk/Contents/Home/bin/java" ...

我的OS X上也安装了这个Java 11,但为什么要使用它呢!? java -version,如上所示,指向1.8u301

cordapp-example % echo $JAVA_HOME
/Users/arinea/.jenv/versions/1.8.0.301

cordapp-example % ll /Users/arinea/.jenv/versions
total 0
lrwxr-xr-x  1 arinea  staff    64B 24 Iul 22:37 1.8 -> /Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home
lrwxr-xr-x  1 arinea  staff    64B 24 Iul 22:37 1.8.0.241 -> /Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home
lrwxr-xr-x  1 arinea  staff    64B 13 Aug 16:00 1.8.0.301 -> /Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home
lrwxr-xr-x  1 arinea  staff    63B 24 Iul 22:37 11 -> /Library/Java/JavaVirtualMachines/jdk-11.0.10.jdk/Contents/Home
lrwxr-xr-x  1 arinea  staff    63B 24 Iul 22:37 11.0 -> /Library/Java/JavaVirtualMachines/jdk-11.0.10.jdk/Contents/Home
lrwxr-xr-x  1 arinea  staff    63B 24 Iul 22:37 11.0.10 -> /Library/Java/JavaVirtualMachines/jdk-11.0.10.jdk/Contents/Home
lrwxr-xr-x  1 arinea  staff    64B 24 Iul 22:37 oracle64-1.8.0.241 -> /Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Home
lrwxr-xr-x  1 arinea  staff    64B 13 Aug 16:00 oracle64-1.8.0.301 -> /Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home
lrwxr-xr-x  1 arinea  staff    63B 24 Iul 22:37 oracle64-11.0.10 -> /Library/Java/JavaVirtualMachines/jdk-11.0.10.jdk/Contents/Home

就我个人而言,我不知道为什么JDK11会被选中。。是否需要将其从系统中删除


以后编辑:

当我从cordapp示例目录运行./build/nodes/runnodes时,会发生此问题。如果我转到build/nodes并在那里运行java -jar runnodes.jar,一切正常,正如预期的那样


共 (1) 个答案

  1. # 1 楼答案

    答案就在runnodes脚本文件中:

     1  #!/usr/bin/env bash
     2  
     3  set -eo pipefail
     4  
     5  # Allow the script to be run from outside the nodes directory.
     6  basedir=$( dirname "$0" )
     7  cd "$basedir"
     8  
     9  if [ -z "$JAVA_HOME" ] && which osascript >/dev/null; then
    10      # use default version of java installed on mac
    11      /usr/libexec/java_home  exec java -jar runnodes.jar "$@"
    12  else
    13      "${JAVA_HOME:+$JAVA_HOME/bin/}java" -jar runnodes.jar "$@"
    14  fi
    

    第11行被执行(与第13行相反),它使用/usr/libexec/java_home,这在我的情况下(以及许多其他人的情况下,从我在网上能找到的判断…)将指向安装的最新JDK。这就是JDK 11,Corda与之不兼容

    只需确保你不使用那个,而是使用JDK 8更新131