在 Java 17 中使用 Javascript 脚本引擎

Jus*_*tMe 17 java eval scriptengine java-17

我必须将项目从 Java 8 迁移到 Java 17。

我可以解决大多数问题,但它包含一个方法,在该方法中我使用 ScriptEngineManager 来评估数学术语。

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

在 Java 8 中它按要求工作,但在 Java 17 中e始终为 null。

据谷歌称,Java 17 不再支持 JavaScript 引擎。

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

Java 17 中有没有正确的方法来处理这个问题?

use*_*900 24

Nashorn JavaScript 引擎已从Java 中删除。在 Java 11 中已弃用在 Java 15 中已删除

所以你需要使用不同的脚本引擎,例如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>
Run Code Online (Sandbox Code Playgroud)

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

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

您可以使用以下命令检查可用的引擎

new ScriptEngineManager().getEngineFactories();
Run Code Online (Sandbox Code Playgroud)

或者将不同的脚本引擎添加到您的项目中,例如velocity、jexl、groovy...