Nashorn 与 Java 1.8 到 15 的兼容性?

问题描述

我需要使用 Nashorn JavaScript 引擎的软件与 Java 1.8 以上版本兼容。
如果我使用与 JDK 捆绑的那个,它将无法在 Java >= 15 上运行。如果我使用 standalone Nashorn,它将与 Java 有没有办法保持兼容性?我已经考虑过反射,但可能有更有效的方法

解决方法

Nashorn 维护者在这里。应该可以从 Java 11 的源代码中编译独立的 Nashorn。不幸的是,我很确定我们不能低于它。你是直接使用它的API吗?在这种情况下,不幸的是内置 Nashorn 的包名称和独立版本之间不匹配。如果您只能依赖 javax.script.* API,那么应该可以同时使用两者。

我想更好地了解您的用例并帮助您找到解决方案。

,

如您所见,Nashorn 在 Java 11 的 JEP 335(JDK 增强提案)中已被弃用,随后在作为 Java 15 的一部分提供的 JEP 372 中被删除。移除是

随着 ECMAScript 语言构造以及 API 的快速调整和修改,我们发现 Nashorn 难以维护。

因此,它不会成为未来的选择。相反,如果您正在寻找替代方案,我建议您查看 GraalVM 之类的选项。如introduction中所述:

它专为使用 Java、JavaScript、基于 LLVM 的语言(例如 C 和 C++)以及其他动态语言编写的应用程序而设计。它消除了编程语言之间的隔离,并在共享运行时中实现了互操作性。

,

如果您不能简单地not distribute为 JDK

根级别不应提供任何内容,然后在 META-INF/versions/15/ 中包含所有实际类

文档:JAR Specification: Multi-release JAR files

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...