Java 8 SE Embedded 上的 Nashorn 脚本引擎为空

Nashorn Script Engine is null on Java 8 SE Embedded

我正在尝试将 Java脚本功能引入我的机器人平台,使用 Java 8 的全新 Nashorn 引擎。这是用于创建 Nashorn 脚本引擎实例的行:

ScriptEngine nashorn = new ScriptEngineManager().getEngineByName("nashorn");

运行 这在我自己的电脑上工作正常,但在部署平台上,生成的 nashorn 对象为 null,并且无论何时使用它当然都会给出 NullPointerException。稍加调试后,我们知道 new ScriptEngineManager() 不是 null,而是 .getEngineByName() 返回的引擎;为空。

此问题出现在 FIRST Robotics roboRIO,运行 Java 8 SE Embedded。

他们正在使用 compact 2 Java 配置文件来创建 JRE。您应该创建自己的 JRE,其中包括 nashorn。

SE Embedded 支持 nashorn。

您可以从 SE Embedded ejdk1.8.0 二进制文件复制 nashorn.jar 到您的 jre/lib/ext 目录或 运行 中包含的 jrecreate.sh 工具 嵌入式JDK(ejdk1.8.0).

这是最近的 SE 嵌入式下载:

http://www.oracle.com/technetwork/java/embedded/embedded-se/downloads/index.html

这里有一个如何使用 jrecreate 的例子:

cd ejdk1.8.0_xx/bin sh jrecreate --profile compact2 -x nashorn --dest {目标 JRE 目录}

如果 FIRST Robotics 包含其他嵌入式扩展,您可以查看 您当前正在 运行 的 JRE 顶部的 "bom" 文件。这包含用于生成 JRE 的 jrecreate 命令。

鲍勃·范德特 Java SE 嵌入式潜在客户 甲骨文