2016-11-11 2 views
0

openjdk 버전 "1.8.0_91"에서 Nashorn을 사용하려고합니다. 내 코드는 아래와 같습니다.Nashorn 던지고 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 모듈에서 내 보내지 않으므로 보안 관리자를 설정/해제하더라도 관계없이 액세스 할 수 있습니다.