首页 > 解决方案 > 已弃用 Nashorn 的建议

问题描述

我正在使用一个库将布尔表达式评估为字符串。使用该库,我收到以下 Java 11 警告:

jdk.nashorn.api.scripting 中的 NashornScriptEngineFactory 已被弃用并标记为删除

但是,我对此有点不清楚。我正在使用以下代码,但我没有看到此代码中引用了 Nashorn,但警告仍然存在。

ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName("JavaScript"); Boolean val = (Boolean) engine.eval(ruleString);

我的问题是这个警告是否仍然适用于这段代码?另外,如果是这样,我可以使用另一种选择吗?

在此先感谢您的帮助。

标签: java

解决方案


Nashorn 是 Java 8+ 的默认 Javascript 引擎。所以这样做:

ScriptEngine engine = factory.getEngineByName("JavaScript")

启动 nashorn javascript 引擎。

所以是的,nashorn 已被弃用的事实(被这个 JEP弃用)确实会影响这段代码,但是 oracle 将在 2026 年 9 月之前支持 java 11(在此处描述),所以至少在那时你对 java 11 的补丁等都很满意。

此外,弃用意味着“标记为在将来某个时间点删除”,实际上并未从 JDK 中删除,因此它也可能潜入下一个 LTS JDK。

要在 JVM 上继续使用 javascript,可以选择:

  • 回到 Rhino(不是很诱人,因为它很慢 - 它不使用更新的字节码指令,例如invokedynamic
  • 迁移到 GraalVM graaljs。这可能是您获得现代 ECMAscript (2019) 时的最佳选择,它旨在为生产做好准备并为许多目标平台构建本机二进制文件。

推荐阅读