Как заставить пакеты Graal SDK работать без Maven? - PullRequest
0 голосов
/ 03 сентября 2018

Я занимаюсь разработкой приложения на Java, которое необходимо выполнить JavaScript. Двигатель Nashorn JS скоро станет устаревшим и замена - это набор API, предоставляемый Graal SDK который использует GraalVM. Виртуальная машина, которая по существу выполняет несколько языков.

По крайней мере, я так думаю. Таким образом, я провел день, пытаясь заставить это работать. Я скачал GraalVM rc6, который использует JDK 8. Я использую IntelliJ IDEA и добавил GraalVM в качестве нового JDK. Мне показалось странным, что я должен добавить виртуальную машину в качестве комплекта для разработки, но я знал, что она основана на JDK 8, поэтому со мной все было в порядке.

И проблема была в отличие от других, я не мог заставить работать новые пакеты. Моя IDE сказала, что не может их разрешить.

На самом деле ни один из пакетов org.graalvm не может быть разрешен.

Итак, я скачал JDK 11 build 28, потому что, насколько я знаю, JDK 11 поставляется с GraalVM начиная с сборки 20.

На самом деле, в этом случае некоторые пакеты могут быть найдены, но гораздо меньше, чем ожидалось: например, org.graalvm.polyglot все еще не может быть разрешен.

Наконец, я попытался добавить Graal SDK от Maven, и пакеты были исправлены. Теперь я получаю исключение при запуске:

Context ctx = Context.create(“js”);

На пути к классам не найдено ни языка, ни реализации полиглота. Убедитесь, что трюфель-api.jar находится на пути к классам.

Я думал, что проблема в первых двух случаях на самом деле не в том, чтобы получить GraalVM JDK, но он выдает исключение даже таким образом.

Может кто-нибудь опытный объяснить это?

Ответы [ 4 ]

0 голосов
/ 13 июня 2019

со следующими характеристиками:

  • IntelliJ IDEA
  • SDKMan
  • GraalVM CE 19.0.0

Я решил эту проблему, выполнив следующие шаги:

  1. В intelliJ перейдите: Файл -> Структура проекта -> SDK
  2. Добавьте новый SDK с именем GraalVM (или выберите описательное имя), затем в домашнем пути JDK выберите путь установки GraalVM в моем случае /Users/cjeronimo/.sdkman/candidates/java/19.0.0-grl

enter image description here

  1. Наконец и так важно добавить graal-sdk.jar

enter image description here

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

GraalVM

GraalVM в настоящее время является высокопроизводительной встраиваемой виртуальной машиной с полиглотом. поддержка ряда языков программирования: Java (и языки JVM), JavaScript (включая node.js), Ruby, R, Python и C / C ++ и другие языки с бэкэндом LLVM.

Вы можете скачать готовый дистрибутив GraalVM здесь: https://www.graalvm.org/downloads. Среди прочего он включает в себя среду выполнения Java, среду узла, механизм JavaScript под названием Graal.js и т. Д.

Graal SDK - это API-интерфейс polyglot, позволяющий GraalVM работать со всеми языковыми реализациями, которые он может запустить. Этот API-интерфейс polyglot упакован в файл jar: $GRAALVM_HOME/jre/lib/boot/graal-sdk.jar.

Добавление этого файла в качестве внешней библиотеки в ваш проект / модуль IDEA позволит IDE находить такие классы, как: org.graalvm.polyglot.Context и org.graalvm.polyglot.Value, которые необходимы для взаимодействия с языками, в том числе реализация JavaScript.

Если ваш проект использует Maven, вы можете добавить системную зависимость к этому файлу, и maven найдет ее в любой системе, где $JAVA_HOME установлен, чтобы указать на распределение GraalVM.

<dependency>
    <groupId>org.graalvm</groupId>
    <artifactId>graal-sdk</artifactId>
    <version>1.0.0-rc</version>
    <scope>system</scope>
    <systemPath>${java.home}/lib/boot/graal-sdk.jar</systemPath>
</dependency>

Теперь, когда вы запустите команду java из дистрибутива GraalVM, необходимые файлы будут автоматически добавлены в путь к классам. Поэтому больше ничего не нужно для запуска в IDE что-то вроде следующего:

import org.graalvm.polyglot.*;
public class Main {
    public static void main(String[] args) {
        Context polyglot = Context.create();
        Value array = polyglot.eval("js", "[1,2,42,4]");
        System.out.println(array.getArrayElement(2).asInt());
    }
}

Теперь это потому, что в GraalVM по умолчанию включен JavaScript-движок Graal.js.

Если вы хотите запустить его на стандартном JDK, вам нужно добавить больше вещей в classpath.

Запуск Graal.js на складе JDK **

Есть вопрос о том, как запустить Graal.js на складе JDK: Как использовать graaljs? Есть ли место, где можно получить файл / файлы .jar? . В принятом ответе более подробно рассказывается, где найти необходимые файлы jar, чтобы он работал на Java 8.

В двух словах вам нужно добавить следующие jar-файлы в classpath, чтобы он действительно работал:

  • graal-sdk.jar - API Polyglot GraalVM
  • truffle-api.jar - API для языковых реализаций.
  • graaljs.jar - это реализация JavaScript-движка GraalVM
  • graaljs-scriptengine.jar - позволяет использовать Graal.js через API механизма сценариев Java.
  • graaljs-launcher.jar
  • tregex.jar - библиотека регулярных выражений
  • truffle-profiler.jar - профилировщик для реализаций трюфельных языков
  • chromeinspector.jar - интеграция с отладчиком
  • launcher-common.jar

Вы можете найти их в дистрибутиве GraalVM, который вы скачали , оба выпуска будут работать нормально.

Теперь без компилятора Graal производительность движка JavaScript была бы неоптимальной. Как вы уже упоминали, JDK 11 поставляется со снимком компилятора Graal (не GraalVM, который является полным распространением проекта GraalVM, включая JS enginer, интерпретатор бит-кода LLVM, реализацию узла, JVM и т. Д.). Вы можете включить компилятор Graal, передав --XX:+UnlockExperimentalVMOptions --XX:+UseJVMCICompiler в команду java.

Теперь выполнение всего этого на JDK 11 может не работать, потому что JDK 11 достаточно отличается от JDK 8 и могут быть проблемы с модульной системой или отсутствующими вещами (такими как jax-b), но это также может работать. Это будет работать на JDK 8.

0 голосов
/ 18 октября 2018

IntelliJ не добавляет все банки из Graal SDK в ваш путь к классам.

Вы можете добавить банки в ваш путь к классам внутри IntelliJ, перейдя к

File > Project Structure > SDKs > Choose your Graal SDK

Затем нажмите кнопку + внизу, чтобы добавить файлы Jar. Добавление graal-sdk.jar решит проблему с поиском пакета org.graalvm.

Add graal-sdk.jar

Это позволит избежать необходимости изменения файла pom.xml для устранения проблемы с IDE.

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

Итак, я обнаружил проблему. IntelliJ IDEA так привык стандартная структура JDK Home, которая не загружала Грааль SDK и др. apis.

Файлы jar Maven, которые приблизили меня к результату, были Точно такие же файлы, которые были в комплекте с GraalVM.

...