【问题标题】:Use graalvm via the standard JDK 11通过标准 JDK 11 使用 graalvm
【发布时间】:2018-10-22 15:17:21
【问题描述】:

我的项目使用了 Nashorn Javascript 引擎。我正在尝试迁移到 java11 并从 Nashorn 迁移到 Graal。我已经阅读了here,我可以通过从 JDK 11 开始的标准 JDK 安装使用 graal。我还在那里读到 Graal-SDK 已上传到 Maven 中心,并且有 Java 标志 polyglot.js.nashorn-compat 以便于迁移.所以我使用了 jdk11,将 maven 依赖项添加到 pom.xml 并使用了 java 标志,但是当我试图通过名称“graal.js”获取引擎时,我在这里得到了 null:

ScriptEngine engine = engineManager.getEngineByName("graal.js")

我错过了什么?如何让它发挥作用?

【问题讨论】:

  • trying the other names"JavaScript", "js" 怎么样?
  • 你误会了,Graalvm 不是 JDK 11 的一部分,但它可以在标准的 JDK 11 上运行(与 oracle labs jdk 8 不同)。 GraalVM 是它自己的虚拟机,独立于 Hotspot:graalvm.org
  • @JornVernee 你能解释一下“在标准 jdk 上运行 graalvm”是什么意思吗?
  • Graal SDK 不包含ScriptEngineimplementation。您需要graaljs-scriptengine.jar。这里也提到了这一点:stackoverflow.com/a/50742571/150978
  • 我认为他们只是发布基于 JDK 8 构建的 GraalVM 版本,您可以在 github 上询问如何获得 GraalVM 的 JDK 11 构建。至于 OpenJDK 中 Nashorn 的替代品,afaik 不会有,但 deprecated 并不意味着它会立即被移除,只是它不会再更新了。

标签: java nashorn java-11 graalvm


【解决方案1】:

这是一个示例 maven 项目,展示了如何通过脚本 API 和多语言 API 在 JDK11 上运行 GraalVM JavaScript 引擎。希望对您有所帮助!

https://github.com/graalvm/graal-js-jdk11-maven-demo

它的要点是添加必要的依赖项(graal-sdk、js、js-scriptengine,以及可选的分析器和 chromeinspector),使用启用的实验选项和 JVMCI 编译器(-XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI)运行并升级模块路径使用 graal jar (--upgrade-module-path=${compiler.dir}/compiler.jar),它也可从 maven (org.graalvm.compiler:compiler) 获得。

【讨论】:

    【解决方案2】:

    您缺少以下依赖项:

    <dependency>
        <groupId>org.graalvm.js</groupId>
        <artifactId>js-scriptengine</artifactId>
    </dependency>
    <dependency>
        <groupId>org.graalvm.truffle</groupId>
        <artifactId>truffle-api</artifactId>
    </dependency>
    

    js-scriptengine 包含 ScriptEngine 实现:com.oracle.truffle.js.scriptengine.GraalJSScriptEngine

    并且需要 truffle-api(如果您直接实例化 GraalJSEngineFactory,您只会收到错误消息:

    GraalJSEngineFactory gsf = new GraalJSEngineFactory();
    

    但是似乎缺少另一个包,因为它对我不起作用。

    【讨论】:

    • 谢谢,我已经尝试了一些方法,但对我也不起作用
    • 您可能缺少以下依赖项:&lt;dependency&gt;&lt;groupId&gt;org.graalvm.sdk&lt;/groupId&gt;&lt;artifactId&gt;graal-sdk&lt;/artifactId&gt;&lt;/dependency&gt;
    猜你喜欢
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多