如何开始使用Oracle的Nashorn JS Engine进行编码,何时在OpenJDK中替换Rhino?

时间:2012-11-17 04:49:34

标签: java rhino openjdk nashorn

我正在寻找一种方法来开始使用Oracle的新Nashorn JavaScript引擎。我已经DL了最新的OpenJDK 8(b65),看来Rhino仍然是唯一包含的脚本引擎。

任何人都知道Nashorn何时(或在哪个版本中)将取代OpenJDK中的Rhino?或者甚至更好,我可以在哪里获得包含它的JDK?我知道Netbeans已经编写了一个调试器来使用它,只是不确定他们从哪里获得了库/代码来开始编写它。

任何人都有一些链接?

感谢。

4 个答案:

答案 0 :(得分:15)

看起来OpenJDK上还没有Nashorn的迹象。

2012年10月Jim Laskey的最新评论显示2012年第四季度:

https://blogs.oracle.com/nashorn/entry/welcome_to_the_nashorn_blog#comment-1351205506968

我认为是时候在SO上添加标签了!

2012年12月1日更新:

看起来像2012年12月下旬OpenJDK可能有https://blogs.oracle.com/nashorn/entry/request_for_project_nashorn_open

2013年3月10日更新:

@Seth是正确的 1.7版本3 PRERELEASE 不是Nashorn。我的错!

JDK 8 b68包含尚未合并的nashorn~jdk8分支。

这个分支的自述文件说:

  

Nashorn回购正在迁移到OpenJDK,因此也是如此   在几个方面不完整。   构建系统未完全集成。完成后,Nashorn将会   安装在JRE的适当位置。   集成后,JDK的正确版本将被包含在内   犀牛。在此期间,请确保使用JDK8 b68或更高版本。

如果你从源头结帐 nashorn~jdk8 ,你可以建立 nashorn.jar

cd nashorn~jdk8/nashorn/make
ant clean; ant

您可以在最近的jdk 1.8版本中从 javax.script.ScriptEngineManager 请求“nashorn”引擎:

jrunscript -cp ./nashorn.jar -l "nashorn" -e "println(engine.factory.getParameter(
    javax.script.ScriptEngine.ENGINE))"
> Oracle Nashorn

或路径中的 nashorn.jar

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");

2014年3月19日更新:

从@ncasas更新; JDK 8 is out和Nashorn是默认的JS引擎。

答案 1 :(得分:9)

我已经做了更多的挖掘,你可以让Nashorn使用它的backport来处理JDK7:

https://bitbucket.org/ramonza/nashorn-backport

检查存储库并尝试使用{Bit}工具栏页面中描述的ant -f make/build.xml构建它

如果由于dynalink而导致构建失败,请应用问题部分here中列出的补丁(我假设开发人员很快会将其修补到主存储库中)。

构建它时,您应该在克隆存储库的dist文件夹中获取一个nashorn.jar文件。

现在您需要使用类似于此的VM选项将此jar添加到您的bootclasspath:

-Xbootclasspath/a:C:/nashorn-backport/dist/nashorn.jar

现在你应该可以使用nashorn了。为了确保这是一个我写的快速测试程序,它将列出可用的引擎工厂:

import javax.script.*;

public class NashornTest {
    public static void main(String args[]) {
        ScriptEngineManager manager = new ScriptEngineManager();
        for (ScriptEngineFactory f : manager.getEngineFactories()) {
            printBasicInfo(f);
            System.out.println();
        }
    }

    public static void printBasicInfo(ScriptEngineFactory factory) {
        System.out.println("engine name=" + factory.getEngineName());
        System.out.println("engine version=" + factory.getEngineVersion());
        System.out.println("language name=" + factory.getLanguageName());
        System.out.println("extensions=" + factory.getExtensions());
        System.out.println("language version=" + factory.getLanguageVersion());
        System.out.println("names=" + factory.getNames());
        System.out.println("mime types=" + factory.getMimeTypes());
    }
}

使用bootclasspath设置运行它将列出Rhino和Nashorn,没有它你将只看到Rhino。

答案 2 :(得分:5)

安装JDK8并为JDK的jjs(Nashorn Interpreter)创建一个别名,例如,如果你创建一个名为test.js的文件,你可以用以下命令运行该程序:

$ jjs test.js

Mac OS = alias jjs ='/ Library / Java / JavaVirtualMachines / jdk1.8.0.jdk / Contents / Home / jre / bin / jjs'

Windows =定义一个名为“JAVA8_HOME”的环境变量并指向您的jdk8文件夹,然后您可以通过运行此命令来调用jjs:

> “%JAVA8_HOME%\jre\bin\jjs” test.js

答案 3 :(得分:2)

我最近一直在研究如何使用它,我目前认为你可以开始使用它的唯一方法是从源代码构建OpenJDK,因为它不是2月7日的当前版本。 / p>

我认为它将在本周晚些时候发布的开发者预览版中(2013年2月21日)。

来源:http://openjdk.java.net/projects/jdk8/