Я перевожу движок Javascript из Nashorn в GraalVm и не могу создать экземпляр GraalJSScriptEngine / ScriptEngine. Я пробовал разные способы сделать это:
GraalJSEngineFactory factory = new GraalJSEngineFactory();
GraalJSScriptEngine engine = factory.getScriptEngine();
GraalJSScriptEngine engine = GraalJSScriptEngine.create(
null,
Context.newBuilder("js")
.allowHostAccess(HostAccess.ALL)
.allowHostClassLookup(s -> true)
);
Я получаю следующие ошибки для выше:
ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider com.oracle.truffle.js.scriptengine.GraalJSEngineFactory could not be instantiated
java.lang.AbstractMethodError: Receiver class com.oracle.truffle.polyglot.PolyglotImpl does not define or inherit an implementation of the resolved method abstract buildEngine(Ljava/io/OutputStream;Ljava/io/OutputStream;Ljava/io/InputStream;Ljava/util/Map;JLjava/util/concurrent/TimeUnit;ZJZZZLorg/graalvm/polyglot/io/MessageTransport;Ljava/lang/Object;Lorg/graalvm/polyglot/HostAccess;)Lorg/graalvm/polyglot/Engine; of abstract class org.graalvm.polyglot.impl.AbstractPolyglotImpl.
ScriptEngine engine = new ScriptEngineManager().getEngineByName("graal.js");
Возвращается ноль при выполнении как ^. Также я заметил, что в экземпляре ScriptEngineManager
присутствует только одна фабрика (Nashorn).
Я добавил jar-трюфель в classpath, а также запустил его с параметрами VM: -ea -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI -Dpolyglot.js.nashorn-compat=true
Я запускаю его на Java 13 со следующими дополнительными зависимостями:
<dependency>
<groupId>org.graalvm.sdk</groupId>
<artifactId>graal-sdk</artifactId>
<version>19.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.graalvm.js/js -->
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js</artifactId>
<version>19.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.graalvm.js/js-scriptengine -->
<dependency>
<groupId>org.graalvm.js</groupId>
<artifactId>js-scriptengine</artifactId>
<version>19.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.graalvm.compiler/compiler -->
<dependency>
<groupId>org.graalvm.compiler</groupId>
<artifactId>compiler</artifactId>
<version>19.1.1</version>
</dependency>
<dependency>
<groupId>org.graalvm.truffle</groupId>
<artifactId>truffle-api</artifactId>
</dependency>