当前位置: 首页 > 知识库问答 >
问题:

如何使用GraalVM在现有grails或Spring应用程序中运行javascript?

宗政金鹏
2023-03-14

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

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

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

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

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

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

还是我们应该坚持Nashorn?

共有2个答案

岳佐
2023-03-14

根据文件,应该是这样的:

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);
  }
}
须原
2023-03-14

运行GraalVM JavaScript引擎的推荐方式是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上运行。

 类似资料:
  • 在我的测试环境中,我想用java启动grails应用程序,不需要单独的tomcat实例。我通过调用 之后,我使用Java部署应用程序:

  • 我不知道如何用GraalVM的SDK编译我的Java应用程序。我相信在使用GraalVMbinary时,默认情况下会将它们添加到类路径中。 我的hello world测试应用程序: 输出: 我使用的是用OpenJDK 11构建的GraalVM二进制文件: 当深入挖掘时,我发现这些类包含在其中。jmod档案位于:

  • 问题内容: 我有一个看起来像这样的docker文件: 我需要在某些时候运行flask run来查看我在flask中创建的端点(在文件夹app下)。我该怎么做才能将此添加到此dockerfile? 我认为我还必须让flask运行其他应用程序,因为flask公开了其他应用程序正在收集的数据。我如何让flask调用其他应用程序并使其在后台运行? 问题答案: 我想你不想要那个入口点(也许你确实想要它,但是

  • 我开始用Spring Boot学习微服务。我转到项目的root并运行命令: 它工作得很好,我可以在localhost:8080/[path]中使用我的endpoint。但是当我尝试使用run as->Spring Boot应用程序从IDE运行我的项目时。我得到这个错误:

  • 问题内容: 我已经将应用程序升级到Grails 2.4.0,并且正在使用hibernate4插件。执行运行应用程序时,会使用内存数据库为每个域类生成以下错误示例。我已经在hibernate论坛上阅读了几则帖子,这些错误并不严重。它只是记录一个错误,因为它要删除的表尚不存在。 2014-Mai-24 13:25:26,788错误[localhost-startStop-1] org.hibernat

  • 这是我尝试启动应用程序时遇到的错误: