2

我希望让我的项目支持自定义脚本代码,包括 Javascript 和 Python。为了轻松支持多种语言,我想使用 ScriptEngine 接口(由 JSR-223 规范定义)。这导致了问题:Java 6 和 7 使用 Mozilla Rhino javascript 引擎,而 Java 8 使用新的 Nashorn javascript 引擎。不幸的是,Rhino 和 Nashorn 之间有几个不兼容的地方。

该项目必须在 Java 7 和 8 上运行。由于无论使用哪种 JVM,我都希望脚本的行为相同,所以我认为最好将 Mozilla Rhino 与我的应用程序捆绑在一起,但我找不到 JSR- 223 (ScriptEngine) 包装器。

库存的 Mozilla Rhino 是否有这样的包装器?

我可以接受与 Java 7 兼容的 Nashorn 反向移植。

切换到 Apache BSF 而不是 JSR-223 会更好吗?

4

2 回答 2

3

目前网络上可用的以下两种解决方案是基于本地构建而不是像Maven这样的基于系统的解决方案,并且基于Maven存储库的解决方案更容易获得工作,只需添加以下依赖项,它将引入org.mozilla:犀牛自动

<dependency>
    <groupId>cat.inspiracio</groupId>
    <artifactId>rhino-js-engine</artifactId>
    <version>1.7.7.1</version>
<dependency>

在 Java 8 中使用 Rhino

在 JDK8 中使用 Rhino JSR-223 引擎

于 2017-08-03T10:04:45.500 回答
1

Apache BSF 似乎没有积极的开发,所以我排除了它。

我无法为 Java 7 找到 Nashorn 的反向移植。

我能够从这里使用 JSR-223 包装器:https ://java.net/projects/scripting/sources/svn/show/trunk/engines/javascript

通过将 RhinoScriptEngine 实现(和相关类)分离到它自己的 Maven 项目中,我能够创建一个包含 JSR-223 包装器和所需的任何特定版本的 Rhino 的工件。

于 2015-08-24T17:01:38.673 回答