使用Mozilla Rhino JSR223和Java8

时间:2015-08-21 23:29:15

标签: java rhino jsr223

我希望允许我的项目支持自定义脚本代码,包括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会更好吗?

2 个答案:

答案 0 :(得分:2)

网上当前可用的解决方案如下所示两个基于本地构建而不是基于Maven等系统,并且该解决方案更容易基于Maven存储库获得工作,只需添加以下依赖项,它将引入组织.mozilla:自动犀牛

<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

答案 1 :(得分:1)

Apache BSF似乎没有活跃的开发,因此我将其排除在外。

我无法找到Nashorn for Java 7的后端。

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

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