Javascript 用graalVM替换nashorn
我正在将一个Javascript引擎从Nashorn迁移到GraalVm,它无法实例化GraalJSScriptEngine/ScriptEngine。 我尝试了不同的方法:Javascript 用graalVM替换nashorn,javascript,java,nashorn,graalvm,graaljs,Javascript,Java,Nashorn,Graalvm,Graaljs,我正在将一个Javascript引擎从Nashorn迁移到GraalVm,它无法实例化GraalJSScriptEngine/ScriptEngine。 我尝试了不同的方法: GraalJSEngineFactory factory = new GraalJSEngineFactory(); GraalJSScriptEngine engine = factory.getScriptEngine(); 我在上面遇到以下错误: ScriptEngineManager providers.nex
GraalJSEngineFactory factory = new GraalJSEngineFactory();
GraalJSScriptEngine engine = factory.getScriptEngine();
我在上面遇到以下错误:
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.
执行like^时返回null。我还注意到,ScriptEngineManager
实例中只有一个工厂(Nashorn)
我在类路径中添加了truffleAPI 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>
org.graalvm.sdk
格拉尔sdk
19.1.1
org.graalvm.js
js
19.1.1
org.graalvm.js
js脚本引擎
19.1.1
org.graalvm.compiler
编译程序
19.1.1
org.graalvm.truffle
松露原料药
假设您以的工作为起点是否安全?是的,我已经开始了,但是GraalJSScriptEngine/ScriptEngine的实例化失败了,我需要特定的JDK吗?啊,我刚刚注意到您正在JDK13上运行。在JDK13()上运行时已经报告了一些问题。应该使用JDK11或12。在JDK8上遇到相同的问题。你找到解决办法了吗?找到了!我可以继续使用GraalJSEngineFactory factory=new-GraalJSEngineFactory();GraalJSScriptEngine engine=GraalJSScriptEngine.create(null,Context.newBuilder(“js”).allowHostAccess(HostAccess.ALL).allowHostClassLookup(s->true.allowAllAccess(true));假设您以的工作为起点安全吗?是的,我已经开始了,但是GraalJSScriptEngine/ScriptEngine的实例化失败了,我需要特定的JDK吗?啊,我刚刚注意到您正在JDK13上运行。在JDK13()上运行时已经报告了一些问题。应该使用JDK11或12。在JDK8上遇到相同的问题。你找到解决办法了吗?找到了!我可以继续使用GraalJSEngineFactory factory=new-GraalJSEngineFactory();GraalJSScriptEngine engine=GraalJSScriptEngine.create(null,Context.newBuilder(“js”).allowHostAccess(HostAccess.ALL).allowHostClassLookup(s->true.allowAllAccess(true));
ScriptEngine engine = new ScriptEngineManager().getEngineByName("graal.js");
<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>