如何使用 GraalVM 运行 javascript 现有的 grails 或 spring 应用程序?

how to run javascript inside existing grails or spring application using GraalVM?

不幸的是,Nashorn 已被弃用,因为有很多示例。

我们了解到 GraalVM 可以编译 运行 应用程序。我们不需要这个。

我们只想在我们的 java 应用程序中 运行 一些 java 脚本。加载一个 java 脚本文件,然后定期对其调用方法,并让 java 脚本调用 java 作为响应。 java脚本是我们需要能够在浏览器客户端或服务器上运行的引擎。

有没有人见过在 spring 应用程序或更好的 grails 中使用 GraalVM 处理 运行 js 文件的方法?我们使用 gradle。

明确地说,我们不想使用 graalvm 来编译我们的应用程序。我们只需要一个可以 运行 js 在我们现有应用程序中的实用程序。

示例和文档很少见。似乎也没有任何 gradle 插件或选项支持它。

还是应该坚持使用 Nashorn?

根据文档,它应该是这样的:

package graaltest;
import org.graalvm.polyglot.*;
public class GraalVMTest {
  public static void main(String[] args) {
    Context context = Context.create();
    context.eval("js", "var test = Java.type('graaltest.GraalVMTest'); test.hello('World');");
  }

  public static void hello(String what) {
    System.out.println("Hello "+what);
  }
}

推荐的 运行 GraalVM JavaScript 引擎的推荐方式是 GraalVM。您似乎对 GraalVM 和 GraalVM native-image 有一些误解。 GraalVM 是一个功能齐全的 JDK8,它 支持 提前编译 java 应用程序,但不 强制 它。您可以像使用任何其他 JDK8 一样使用 GraalVM(例如,将 JAVA_HOME 指向 GraalVM 目录)。您只需获得多语言支持并可能获得更好的性能。

如果你是 运行ning JDK11+ 看看示例 maven 项目 https://github.com/graalvm/graal-js-jdk11-maven-demo (as answered here )

如果您运行正在使用 JDK8 并坚持不使用 GraalVM,那么您的选择相当有限。您仍然可以使用 GraalVM java 脚本引擎,但在解释器模式下只会导致更差的性能。我链接到的示例存储库在 pom.xml 文件中有一个 "jdk8" 配置文件,它显示了如何 运行 on stock jdk8.