我希望允许我的项目支持自定义脚本代码,包括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会更好吗?
答案 0 :(得分:2)
网上当前可用的解决方案如下所示两个基于本地构建而不是基于Maven等系统,并且该解决方案更容易基于Maven存储库获得工作,只需添加以下依赖项,它将引入组织.mozilla:自动犀牛
<dependency>
<groupId>cat.inspiracio</groupId>
<artifactId>rhino-js-engine</artifactId>
<version>1.7.7.1</version>
<dependency>
答案 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的工件。