Java8 使用 Mozilla Rhino JSR223

Using Mozilla Rhino JSR223 with Java8

我希望允许我的项目支持自定义脚本代码,Javascript 和 Python。为了轻松支持多种语言,我想使用 ScriptEngine 接口(由 JSR-223 规范定义)。这就导致了问题:Java6和7使用Mozilla Rhinojavascript引擎而Java8使用新的Nashornjavascript引擎。不幸的是,Rhino 和 Nashorn 之间存在一些不兼容性。

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

Mozilla Rhino 有这样的包装器吗?

我可以接受与 Java 7 兼容的 Nashorn backport。

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

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

我找不到 Java 7 的 Nashorn backport。

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

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

目前网上可用的解决方案如下两个是基于本地构建的,而不是基于系统的Maven,基于Maven仓库的解决方案更容易上手,只需添加下面的依赖,它会带来在 org.mozilla:rhino 中自动

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

Using Rhino with Java 8

Using Rhino JSR-223 engine with JDK8