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



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

我们知道GraalVM可以编译和运行应用程序。 我们不需要这个。

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

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

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

示例和文档在地面上很薄。 似乎也没有任何 gradle 插件或选项来支持它。

还是我们应该坚持使用纳索恩?

运行 GraalVMJavaScript 引擎的推荐方式是 GraalVM。您在GraalVM和GraalVM本机映像之间似乎存在一些误解。GraalVM是一个功能齐全的JDK8,它确实支持Java应用程序的提前编译,但它没有强制要求它。您可以像使用任何其他JDK8一样使用GraalVM(例如,指向GraalVM目录的点JAVA_HOME(。您只会获得多语言支持,并且可能获得更好的性能。

如果您正在运行 JDK11+,请查看示例 maven 项目 https://github.com/graalvm/graal-js-jdk11-maven-demo(如此处回答 通过标准 JDK 11 使用 graalvm(

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

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

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);
}
}

最新更新