【问题标题】:How can I use custom java type in Graal.js如何在 Graal.js 中使用自定义 java 类型
【发布时间】: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


【解决方案1】:

事实证明,我错过了 --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

因此,类文件被创建并可供 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2020-01-05
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 2019-06-18
    相关资源
    最近更新 更多