【发布时间】:2018-09-12 13:33:42
【问题描述】:
我在 java 文件中存储了一个 Phone 类,并将其添加到静态 Web 项目IntelliJidea。另外,我在项目中创建了 App.js 文件,并尝试在 GraalVM 下调用纯 node js 函数,使用: graalvm/.../node -jvm -polyglot ~/source/graalvm_samples/graal_vm_sample_js/app.js 但 nodejs 失败,报错:“Access to host class Phone is not allowed or does not exist.”
App.js
javascript 与 JavaCode 的混合
console.log("Hello NodeJs");
var Phone = Java.type('graalSample.Phone');
let phone = new Phone(12345);
console.log(phone.number);
console.log(phone.call('Someone'));
电话类:
package graalSample;
public class Phone {
public final int number;
public Phone(int number){
this.number = number;
}
public void call(String name){
System.out.printf("Calling ... "+name);
}
}
同时,以下具有标准 java 类型的代码可以正常工作。 借用这里Use java class in Graal.js
App.js
var ArrayList = Java.type("java.util.ArrayList");
var myList = new ArrayList();
myList.add("hello");
myList.add("world");
print(myList);
【问题讨论】:
-
不就是--jvm和--polyglot吗?此外,您需要使用 --jvm.cp 将 Java 类添加到类路径中
-
所有列出的选项都是必需的。谢谢你最后一个“--jvm.cp”github.com/graalvm/graaljs/blob/master/docs/user/…。此外,我必须在运行之前构建 java 类。
-
由于仅使用 JS 和 Java,我的解决方案中可能会跳过 --polyglot。无论如何,非常感谢。
标签: javascript java graalvm