Skip to content

JEP 335: Deprecate the Nashorn JavaScript Engine for Removal | 弃用 Nashorn JavaScript 引擎

摘要

弃用 Nashorn JavaScript 脚本引擎和 API 以及 jjs 工具,计划在未来的版本中移除它们。

动机

Nashorn JavaScript 引擎最初通过 JEP 174 被整合到 JDK 8 中,作为 Rhino 脚本引擎的替代品。当它发布时,它是 ECMAScript-262 5.1 标准的完整实现。

然而,随着 ECMAScript 语言构造以及 API 的快速发展和修改,我们发现维护 Nashorn 变得具有挑战性。

非目标

这次弃用不会影响 javax.script API。

描述

两个 JDK 模块 将被最终弃用,即它们将被标记为 @Deprecated(forRemoval=true)

  • jdk.scripting.nashorn -- 包含 jdk.nashorn.api.scriptingjdk.nashorn.api.tree 包。

  • jdk.scripting.nashorn.shell -- 包含 jjs 工具。运行 jjs 将显示警告:

    警告:jjs 工具计划在未来的 JDK 版本中移除。

一个单独的 JEP 将在未来的 JDK 功能发布中针对这些类型和模块的实际移除进行提交。

替代方案

一个替代方案是,一组可信的开发人员表达继续维护 Nashorn 的明确意愿。如果这种情况发生在本 JEP 被集成之前,那么本 JEP 可以被撤回。如果这种情况发生在本 JEP 被集成之后但在 Nashorn 被移除之前,那么可以提交一个后续 JEP 来撤销弃用。

风险和假设

移除 Nashorn 的风险是某些应用程序将不再运行,因为它们预期 JavaScript 是存在的。跟踪 Nashorn 的使用广度并不容易。希望针对本 JEP 的反馈能提供对 Nashorn 实际使用的更好洞察。