从Nashorn切换到Rhino(Gradle)

时间:2016-09-19 00:05:18

标签: java gradle java-8 rhino nashorn

我使用Java 8和Kotlin,我项目中的一个库(http://michel-kraemer.github.io/citeproc-java/)拒绝在与Java 8捆绑的Nashorn JavaScript解释器上运行。解决方案是使用Rhino JavaScript解释器代替。

我使用Gradle构建我的项目。我已经将Rhino添加到我的依赖项中,但是该库仍然坚持使用Nashorn。

compile 'org.mozilla:rhino:1.7.7.1' 

此外,以下代码产生NullPointerException:

val m = ScriptEngineManager()
// specifically look for "rhino" engine
val engine = m.getEngineByName("rhino")

所以看起来Rhino不在任何地方的类路径上。如何确保我的应用程序可以使用Rhino?

2 个答案:

答案 0 :(得分:2)

基于Rhino的jsr223引擎不再随jdk8 +一起提供。但是,您可以按照此处记录的步骤在jdk8 +上获取Rhino引擎 - > https://wiki.openjdk.java.net/display/Nashorn/Using+Rhino+JSR-223+engine+with+JDK8

那就是说,我们想知道为什么不能使用nashorn!请提交错误或将问题报告发送到nashorn-dev openjdk别名。

答案 1 :(得分:0)

除了Rhino引擎,您还需要JSR-233桥接器(因为它不再是JDK)。您可以使用以下maven依赖项:

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

然后你只需要调用正确的脚本引擎:

new ScriptEngineManager().getEngineByName("rhino");