Как я могу использовать пользовательский тип Java в Graal.js - PullRequest
0 голосов
/ 12 сентября 2018

Я сохранил класс Phone в java-файле и добавил его в статический веб-проект IntelliJ идея. Кроме того, я создал файл App.js в проекте и попытался вызвать чистую функцию node js в GraalVM, используя: graalvm /.../ node -jvm -polyglot ~ / source / graalvm_samples / graal_vm_sample_js / app.js, но nodejs в GraalVM завершается ошибкой со следующей ошибкой: «Доступ к классу телефона Phone не разрешен или не существует».

App.js

javascript mixin с 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);
        }
    }

Sametime, следующий код со стандартными типами Java работает нормально. Заимствовано здесь Использовать Java-класс в Graal.js

App.js

 var ArrayList = Java.type("java.util.ArrayList");

 var myList = new ArrayList();

 myList.add("hello");

 myList.add("world");

 print(myList);

1 Ответ

0 голосов
/ 13 сентября 2018

Как оказалось, я пропустил параметр --jvm.cp и не собирал 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
...