纳什orn抛出java.lang.RuntimeException: java.lang.ClassNotFoundEx



我正在尝试在openjdk版本"1.8.0_91"中使用Nashorn。我的代码如下:

ScriptEngineManager manager = new ScriptEngineManager(null);
ScriptEngine engine = manager.getEngineByName("nashorn");
engine.eval(getJSReaderFromResorces("env.nashorn.1.2.js"));

在最后一行抛出异常,如下所示。

Caused by: java.lang.ClassNotFoundException: jdk.nashorn.internal.runtime.Context.getContext
    at jdk.nashorn.internal.runtime.NativeJavaPackage.classNotFound(NativeJavaPackage.java:162)
    at jdk.nashorn.internal.scripts.Script$^eval_.:program(<eval>:1249)
    at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:623)
    at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494)
    at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393)
engine.eval(getJSReaderFromResorces("env.nashorn.1.2.js"));

这个脚本似乎使用了名为"jdk.nashorn.internal.runtime.Context"的Nashorn内部类。这来自一个名为"jdk.nashorn.internal.runtime"的包。当您在安全管理器上运行时,这个包是受访问保护的,因此对脚本不可见。

在任何情况下,访问nashorn内部/实现类都是一个好主意——因为它们没有兼容性保证。

在java 9中,这些包不会从nashorn模块导出,因此无论安全管理器是否打开,都无法访问。

最新更新