为什么 GraalVM-node 找不到我的 jar 文件?

如何解决为什么 GraalVM-node 找不到我的 jar 文件?

我试图让我的 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: []
}
  1. 为什么 Graal-node 认为我的 jar 是一个节点模块,但它是 vm.cp= 选项的参数?
  2. Graal-node 似乎修改--vm.cp= 选项
  3. 我已经多次检查了 jar 文件文件系统路径,它确实存在
  4. 还有什么我遗漏的地方吗?
  5. 我可以从 Node.js 调用 Java 库,但现在我想调用自己的代码...

我的 Graal 版本是

% 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= 选项。 ?

解决方法是:在你的 Node.js 代码中使用类似的东西

Java.addToClasspath("/Users/ekolotyluk/.m2/repository/com/fispan/crypto/common/0.1.0-SNAPSHOT/common-0.1.0-SNAPSHOT.jar")

自我提醒:在进行 Google 搜索时,它几乎不知道什么是最近的信息,什么是过时的...

,

--vm.cp 是指定类路径的正确选项。

默认情况下,node 运行时不包含 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)

您还可以使用 JS 代码中的以下行,按照您在答案中的指定,以编程方式将 jar 添加到类路径中。

Java.addToClasspath("/path/to/jar/file.jar")

您从问题中得到的错误消息表明:--jvm.cp 被指定为节点说它试图查找模块: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'

如果 JavaScript 上下文无权访问 Java 类(此处略作描述:https://www.graalvm.org/reference-manual/js/FAQ/#errors),可能会发生类似的错误。

但是 GraalVM 的 node.js 中的 JavaScript 上下文并没有限制对 Java 类的访问,所以为了完整性,我主要包括这个。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?