Node.js 为什么GraalVM节点找不到我的jar文件?

Node.js 为什么GraalVM节点找不到我的jar文件?,node.js,graalvm,graaljs,Node.js,Graalvm,Graaljs,我试图让我的Node.js代码调用我的Java代码,但是当我运行 % ls -la /Users/ekolotyluk/.m2/repository/com/fispan/crypto/common/0.1.0-SNAPSHOT/common-0.1.0-SNAPSHOT.jar -rw-r--r--@ 1 ekolotyluk staff 15218 17 Mar 06:19 /Users/ekolotyluk/.m2/repository/com/fispan/crypto/commo

我试图让我的Node.js代码调用我的Java代码,但是当我运行

 % ls -la /Users/ekolotyluk/.m2/repository/com/fispan/crypto/common/0.1.0-SNAPSHOT/common-0.1.0-SNAPSHOT.jar
-rw-r--r--@ 1 ekolotyluk  staff  15218 17 Mar 06:19 /Users/ekolotyluk/.m2/repository/com/fispan/crypto/common/0.1.0-SNAPSHOT/common-0.1.0-SNAPSHOT.jar    

% $GRAALVM_HOME/bin/node --jvm —-vm.cp=/Users/ekolotyluk/.m2/repository/com/fispan/crypto/common/0.1.0-SNAPSHOT/common-0.1.0-SNAPSHOT.jar --polyglot src/index.js
我回来了

internal/modules/cjs/loader.js:815
  const err = new Error(message);
          ^

Error: Cannot find module '/Users/ekolotyluk/dev/fispan/microservices/file-service/—-jvm.cp=/Users/ekolotyluk/.m2/repository/com/fispan/crypto/common/0.1.0-SNAPSHOT/common-0.1.0-SNAPSHOT.jar'
    at Function._resolveFilename (internal/modules/cjs/loader.js:815:15)
    at Function._load (internal/modules/cjs/loader.js:667:27)
    at Function.executeUserEntryPoint (internal/modules/run_main.js:60:12)
    at internal/main/run_main_module.js:17:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}
为什么Graal node认为我的jar是一个节点模块,而它是vm.cp=选项的一个参数? Graal节点似乎正在损坏-vm.cp=选项 我已经多次检查了jar文件的文件系统路径,它确实在那里 我还有什么地方遗漏了吗? 我可以从Node.js调用Java库,但现在我想调用我自己的代码。。。 我的一般版本是

% java -version
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment GraalVM CE 21.0.0.2 (build 11.0.10+8-jvmci-21.0-b06)
OpenJDK 64-Bit Server VM GraalVM CE 21.0.0.2 (build 11.0.10+8-jvmci-21.0-b06, mixed mode, sharing)
任何想法都将不胜感激

经过更多的调查和运行命令

$GRAALVM_HOME/bin/node --help
$GRAALVM_HOME/bin/node --help:vm

与我阅读的所有文档和示例相反,似乎没有任何-vm.cp=选项 好的,与我阅读的所有文档和示例相反,这里似乎不再有-vm.cp=选项 -vm.cp是指定类路径的正确选项

默认情况下,节点运行时不包含jvm,因此无法加载类,因此不会在帮助消息中列出-vm.cp。因为-help:vm只列出底层vm选项。 使用-jvm运行可以解决此问题:

$ node --jvm --help:vm | grep classpath
  --vm.classpath=<path>[:path...]              Manage the classpath for Java libraries that you can access from guest languages (':' separated list)
  --vm.cp=<path>[:path...]                     Manage the classpath for Java libraries that you can access from guest languages (':' separated list)
  --vm.Xbootclasspath/a:<path>[:path...]       Append classpath entries to the JVM's boot classpath (':' separated list)
问题中的错误消息表明,指定了如下内容:-jvm.cp,因为节点表示它尝试查找模块:错误:找不到模块“/Users/ekolotyluk/dev/fispan/microservices/file service/--jvm.cp=/Users/ekolotyluk/.m2/repository/com/fispan/crypto/common/0.1.0-SNAPSHOT.jar”

如果JavaScript上下文无法访问此处描述的Java类,则可能会发生类似错误:


但是GraalVM的node.js中的JavaScript上下文并没有限制对Java类的访问,因此我主要是为了完整性而包含这些内容。

很抱歉,您的回答没有太大帮助,并且表明您没有阅读我写的内容。必须使用node-jvm-help:vm是一个设计缺陷,因为node-help:vm应该足够了。另一个缺陷是,我正确地指定了-vm.cp=选项的路径,但graal node不知怎么把它弄错了。很抱歉,答案没有帮助。我只是想澄清-vm.cp是正确的选项,没有-jvm的节点不会采用类路径,因为它无法加载Java类。上面的示例命令在-vm.cp中有两种不同类型的破折号,这可能是故障的原因。
Java.addToClasspath("/path/to/jar/file.jar")