我必须将项目从 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());
}
在 Java 8 中它按要求工作,但在 Java 17 中
e
始终为 null。
根据 google 的说法,Java 17 中不再支持 JavaScript 引擎。
由于项目限制,我不允许使用第三方库。
Java 17 中有处理这个问题的正确方法吗?
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>
然后将引擎名称更改为graal.js。
// Graal ScriptEngine graalEngine = new ScriptEngineManager().getEngineByName("graal.js"); graalEngine.eval("print('Hello World!');");
您可以使用以下方式检查哪些引擎可用
new ScriptEngineManager().getEngineFactories();
或者向您的项目添加不同的脚本引擎,如velocity、jexl、groovy...