#java #java-11 #graalvm #graaljs
#java #java-11 #graalvm #graaljs
Вопрос:
Я новичок в Graal. Я ссылаюсь на этот документ. Я использую JDK 11.
Ниже приведен код, который я пытаюсь запустить:
ScriptEngine graaljsEngine = new ScriptEngineManager().getEngineByName("graal.js");
if (graaljsEngine == null)
{
System.out.println("Graal.js not found");
return null;
}
try
{
System.out.println(graaljsEngine.eval("IncomingMessageString"));
}
catch (ScriptException e)
{
e.printStackTrace();
}
используются банки:
1: truffle-api-20.2.0.jar
2: js-scriptengine-20.2.0.jar
3: js-20.2.0.jar
4: graal-sdk-20.2.0.jar
5: compiler-20.2.0.jar
При попытке выполнить приведенный выше код я сталкиваюсь со следующей ошибкой:
ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider com.oracle.truffle.js.scriptengine.Не удалось создать экземпляр GraalJSEngineFactory
Я попытался запустить код со следующими параметрами виртуальной машины:
-Dpolyglot.inspect.Secure=false
это все еще не решает проблему.
Ответ №1:
Наконец, пришлось использовать автоматизацию сборки, и это заставило ее работать, что странно, поскольку я не упоминаю никаких новых jar, кроме тех, которые я уже добавил вручную.
Если вы используете gradle, поместите это в свой build.gradle, и все в порядке:
dependencies {
compile group: 'org.graalvm.js', name: 'js', version: '20.2.0'
compile group: 'org.graalvm.js', name: 'js-scriptengine', version: '20.2.0'
compile group: 'org.graalvm.sdk', name: 'graal-sdk', version: '20.2.0'
compile group: 'org.graalvm.truffle', name: 'truffle-api', version: '20.2.0'
}
Если вы используете maven, поместите это в свой build.gradle, и ваши данные хороши:
<properties>
<graalvm.version>20.2.0</graalvm.version>
<compiler.dir>${project.build.directory}/compiler</compiler.dir>
</properties>
<dependencies>
<dependency>
<groupId>org.graalvm.sdk</groupId>
<artifactId>graal-sdk</artifactId>
<version>${graalvm.version}</version>
</dependency>
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js</artifactId>
<version>${graalvm.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js-scriptengine</artifactId>
<version>${graalvm.version}</version>
</dependency>
<dependency>
<groupId>org.graalvm.tools</groupId>
<artifactId>profiler</artifactId>
<version>${graalvm.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.graalvm.tools</groupId>
<artifactId>chromeinspector</artifactId>
<version>${graalvm.version}</version>
<scope>runtime</scope>
</dependency>
Я уверен, что эти инструменты автоматизации сборки решают проблему, получая другие недостающие банки. Я нашел эту ссылку полезной: http://www.mosgrom.net/stuff/graalvm.html но, как я уже сказал, простое добавление необходимых jar вручную путем распаковки двоичного файла сообщества graalvm или из репозитория maven в мой java-проект не решило проблему, если я не использовал maven / gradle для управления зависимостями. Надеюсь, это поможет кому-нибудь еще с такой же проблемой :).
Ответ №2:
Самое простое и эффективное решение — запустить ваш код в дистрибутиве GraalVM: просто измените JAVA_HOME
путь к GraalVM или измените настройки Java home в вашей IDE.
Если вы настаиваете на использовании другого дистрибутива JDK, то взгляните на https://www.graalvm.org/reference-manual/js/RunOnJDK /