5

我试图让 Oracle 的 Nashorn 在 Java 7 下运行。

我已经克隆了 repo 并编译了源代码。我所要做的就是编译它:

  • 将 jdk.internal.org.objectweb.asm.* 更改为 org.objectweb.asm.*
  • 更改具有 Long.hashCode() 静态的一行。

一切似乎都很愉快,Java 7 将 Nashorn 视为脚本引擎;但是当我尝试获取一个实例时:

NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine();

我得到了例外:

java.lang.RuntimeException: java.lang.ClassNotFoundException: jdk.nashorn.internal.runtime.Context.newGlobalTrusted(Context.java:831) 处 jdk.nashorn.internal.runtime.Context 处的 jdk.nashorn.internal.objects.Global .newGlobal(Context.java:636) 在 jdk.nashorn.api.scripting.NashornScriptEngine$2.run(NashornScriptEngine.java:270) 在 jdk.nashorn.api.scripting.NashornScriptEngine$2.run(NashornScriptEngine.java:266) 在java.security.AccessController.doPrivileged(Native Method) 在 jdk.nashorn.api.scripting.NashornScriptEngine.createNashornGlobal(NashornScriptEngine.java:266) 在 jdk.nashorn.api.scripting.NashornScriptEngine.(NashornScriptEngine.java:104) 在 jdk .nashorn.api.scripting.NashornScriptEngine.(NashornScriptEngine.java:78) 在 jdk.nashorn.api.scripting.NashornScriptEngineFactory。getScriptEngine(NashornScriptEngineFactory.java:139)

jdk.nashorn.internal.objects.Global 在我的课程路径中。Nashorn 是否可能使用不同的类加载器?

4

1 回答 1

7

我之前尝试让它在 7 岁以下工作,但遇到了与您相同的错误。我认为这与 Nashorn 利用 Java 8 中的一些新特性有关。

bitbucket 上有一个用于 JDK 7 的 Nashorn 反向移植;我在我的作品博客上写了一篇博文,详细介绍了如何使用。您还可以查看此堆栈溢出问题以获取更多信息。

那个 bitbucket 项目已经有一段时间没有更新了,如果你想玩 Nashorn ,我建议你使用Java 8的预览版。

于 2013-07-03T10:55:02.113 回答