20

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

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

有人有一些链接吗?

谢谢。

4

4 回答 4

15

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

Jim Laskey 在 2012 年 10 月的最新评论表明 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 将包裹在 Nashorn 周围。同时,请确保您使用 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 已经发布,Nashorn 是默认的 JS 引擎。

于 2012-11-17T13:12:21.657 回答
9

我做了更多的挖掘工作,您可以通过使用位于此处的反向端口让 Nashorn 使用 JDK7:

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

签出该存储库并尝试ant -f make/build.xml按照 BitBucket 页面上的说明使用它来构建它

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

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

现在您需要使用类似于以下的 VM 选项将此 jar 添加到您的引导类路径:

-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。

于 2013-03-26T10:48:51.427 回答
5

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

$ jjs test.js

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

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

> “%JAVA8_HOME%\jre\bin\jjs” test.js
于 2013-08-26T15:05:30.323 回答
2

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

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

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

于 2013-02-18T11:32:02.357 回答