我如何开始使用Oracle的Nashorn JS引擎进行编码,它何时会在OpenJDK中取代Rhino?

2022-09-02 09:44:30

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

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

有人有一些链接吗?

谢谢。


答案 1

看起来在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 Release 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

或者用纳斯霍恩.jar在路径中:

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

2014年3月19日更新:

从@ncasas年更新;JDK 8已经出局,Nashorn是默认的JS引擎。


答案 2

我已经做了更多的挖掘,你可以通过使用位于这里的JDK7的向后移植来让Nashorn使用JDK7:

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

签出该存储库并尝试使用 BitBucket 页面上所述进行构建ant -f make/build.xml

如果您由于 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。


推荐