1

我正在将 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");

它在执行 ^ 时返回 null。ScriptEngineManager我还注意到实例中只有一个工厂(Nashorn) 。

我在类路径中添加了 truffle-api jar 并使用 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>
4

0 回答 0