2016-11-11 6 views
0

openjdkバージョン "1.8.0_91"でNashornを使用しようとしています。私のコードは以下の通りです。Nashorn throwing java.lang.RuntimeException:java.lang.ClassNotFoundException:jdk.nashorn.internal.runtime.Context.getContext

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) 

答えて

0
engine.eval(getJSReaderFromResorces("env.nashorn.1.2.js")); 

このスクリプトは、 "jdk.nashorn.internal.runtime.Context" と呼ばれるNashorn内部クラスを使用することが表示されます。これは "jdk.nashorn.internal.runtime"というパッケージからのものです。セキュリティマネージャを有効にして実行すると、このパッケージはアクセス保護されており、スクリプトには表示されません。

いずれにしても、nashornの内部/実装クラスにアクセスすることは良い考えです。互換性が保証されていないからです。

Java 9では、これらのパッケージはnashornモジュールからエクスポートされないため、セキュリティマネージャのオン/オフに関係なくアクセスできなくなります。