如何在 Graal.js 中使用自定义 java 类型
How can I use custom java type in Graal.js
我在 java 文件中存储了一个 Phone class 并将其添加到一个静态 Web 项目 IntelliJ
idea。此外,我在项目中创建了 App.js 文件,并尝试使用 graalvm/.../node -jvm -polyglot ~/source/graalvm_samples/graal_vm_sample_js/app.js 在 GraalVM 下调用纯 node js
函数,但是 nodejs 在 GraalVM 下失败并出现以下错误:“不允许访问主机 class Phone 或不存在。”
App.js
java脚本与 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'));
Phone class:
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 类型的代码工作正常。
从这里借来的
App.js
var ArrayList = Java.type("java.util.ArrayList");
var myList = new ArrayList();
myList.add("hello");
myList.add("world");
print(myList);
事实证明,我错过了 --jvm.cp 参数并且没有在 node 运行 之前构建 myClass.java。
所以,这是一个可行的解决方案。
目录中的文件:
./src/graalSample/Phone.java
./src/App.js
来源问题包名也有错误。该包必须从 graal_vm_sample_js 重命名为 graalSample.
在 运行 宁 App.js 文件之前,我 运行
javac -d ./out/production/graal_vm_sample_js/ ./src/graal/Phone.java
因此,class 文件已创建并可用于 Graal。
node --jvm --jvm.cp="/Users/myuser/source/graalvm_samples/graal_vm_sample_js/out/production/graal_vm_sample_js" /Users/myuser/source/graalvm_samples/graal_vm_sample_js/out/production/graal_vm_sample_js/App.js
输出看起来像
12345
Calling ...someone
我在 java 文件中存储了一个 Phone class 并将其添加到一个静态 Web 项目 IntelliJ
idea。此外,我在项目中创建了 App.js 文件,并尝试使用 graalvm/.../node -jvm -polyglot ~/source/graalvm_samples/graal_vm_sample_js/app.js 在 GraalVM 下调用纯 node js
函数,但是 nodejs 在 GraalVM 下失败并出现以下错误:“不允许访问主机 class Phone 或不存在。”
App.js
java脚本与 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'));
Phone class:
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 类型的代码工作正常。
从这里借来的
App.js
var ArrayList = Java.type("java.util.ArrayList");
var myList = new ArrayList();
myList.add("hello");
myList.add("world");
print(myList);
事实证明,我错过了 --jvm.cp 参数并且没有在 node 运行 之前构建 myClass.java。 所以,这是一个可行的解决方案。 目录中的文件:
./src/graalSample/Phone.java
./src/App.js
来源问题包名也有错误。该包必须从 graal_vm_sample_js 重命名为 graalSample.
在 运行 宁 App.js 文件之前,我 运行
javac -d ./out/production/graal_vm_sample_js/ ./src/graal/Phone.java
因此,class 文件已创建并可用于 Graal。
node --jvm --jvm.cp="/Users/myuser/source/graalvm_samples/graal_vm_sample_js/out/production/graal_vm_sample_js" /Users/myuser/source/graalvm_samples/graal_vm_sample_js/out/production/graal_vm_sample_js/App.js
输出看起来像
12345
Calling ...someone