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

在Java 17中使用Javascript脚本引擎

曾涵育
2023-03-14

我必须把一个项目从Java8转移到Java17。

我可以解决大多数问题,但它包含一种方法,我使用ScriptEngineManager来计算一个数学术语。

 ScriptEngineManager mgr = new ScriptEngineManager();
 ScriptEngine e = mgr.getEngineByName("JavaScript");
 
 String t = "5*7";
 if (isMathTerm(t)) {
    System.out.println(e.eval(t).toString());
 }

在Java8中,它可以根据需要工作,但在Java17中e始终为空。

根据谷歌的说法,Java17不再支持JavaScript引擎。

由于项目限制,我不允许使用第三方库。

在Java17中有没有合适的方法来处理这个问题?

共有1个答案

满俊楠
2023-03-14

Java 15删除了Nashorn JavaScript引擎

所以你需要使用不同的脚本引擎,比如GraalVM

切换到GraalVM JavaScript引擎。首先,将所需的依赖项添加到您的项目中。

<dependency>
  <groupId>org.graalvm.js</groupId>
  <artifactId>js</artifactId>
  <version>22.0.0</version>
</dependency>  
<dependency>
  <groupId>org.graalvm.js</groupId>
  <artifactId>js-scriptengine</artifactId>
  <version>22.0.0</version>
</dependency>

然后将引擎名称更改为graal。js。

// Graal
ScriptEngine graalEngine = new ScriptEngineManager().getEngineByName("graal.js");
graalEngine.eval("print('Hello World!');");

您可以使用

new ScriptEngineManager().getEngineFactories();

或者向项目中添加不同的脚本引擎,如velocity、jexl、groovy等等,。。。

 类似资料:
  • 问题内容: 我正在尝试使用Jenkins中用JavaScript编写的脚本。我认为最简单的方法是在.jelly脚本中调用它们。例如:我有文件 myCustom.js : 接下来,我有: global.jelly (来自教程插件): 问题是:没有效果!甚至Hello World Allert也没有显示…我在做什么错?如果我使用: 在果冻中,它显示了allert窗口,但我无法调用整个文档。也许 “ $

  • 我理解单引号和双引号的用法。 但是我不知道剧本中需要双引号。 这种说法没有区别 请告诉我普通引号和双引号之间的区别。

  • 问题内容: 每次执行脚本时,我都试图编写一个小的脚本来挂载VirtualBox共享文件夹。我想用Python来做,因为我正在尝试学习它的脚本。 问题是我需要特权才能启动安装命令。我可以将脚本作为sudo运行,但是我更喜欢它自己制作sudo。 我已经知道将密码写入.py文件并不安全,但是我们谈论的是根本不重要的虚拟机:我只想单击.py脚本并使它工作。 这是我的尝试: 我的python版本是2.6 问

  • 问题内容: 我想在Bash脚本中引发错误,显示消息“测试用例失败!!”。如何在Bash中做到这一点? 例如: 问题答案: 这取决于您要将错误消息存储在何处。 您可以执行以下操作: 或以下内容: 引发异常时,将停止程序的执行。 您还可以使用类似“ 哪里是您可能要返回到操作系统的错误代码”(从0到255)的方法。在这里,只是可以退出的随机代码。当您需要向OS指示程序异常停止(例如发生错误)时,您需要将

  • 我想在Bash脚本中引发一个错误,消息为“测试用例失败!!!”。如何在Bash中做到这一点? 例如:

  • 问题内容: 我正在尝试创建用于设置Docker容器的Shell脚本。我的脚本文件如下所示: 运行此脚本文件将在新调用的bash中运行容器。 现在,我需要运行一个脚本文件(test.sh),该文件已经位于上述给定的shell脚本的容器内(例如:cd /path/to/test.sh && ./test.sh),该怎么做? 问题答案: 您可以使用以下命令在正在运行的容器中运行命令: 并从bash会话运