java.lang.IllegalAccessError가 독립형 nashorn.jar 파일 및 Java 16 + 29 이상과 함께 포함 된 자바 스크립트를 사용하려는 경우

gjwatts

Java 8+에 내장 된 Nashorn 기능과 함께 일부 ANT 빌드 파일에 포함 된 자바 스크립트 코드를 사용합니다. Java 15에서는 Nashorn 기능이 제거되었으므로 독립형 nashorn.jar 파일로 이를 테스트했습니다 . 방금 추가했습니다.

<classpath> <pathelement location="<path>/nashorn.jar"/> </classpath>

그리고 모든 것이 잘 돌아갔습니다. 그리고 Java 16에서는 빌드 16 + 27에서 제대로 작동했습니다.

간단한 테스트 ANT 스크립트를 실행할 때 Java 16 + 29 이상부터 시작합니다.

<project name="Test" default="build" basedir=".">
    <target name="build">
      <echo message="Begin"/>
      <script language="javascript">
        <classpath> <pathelement location="C:/nashorn/nashorn-0.1.0.2013070801.jar"/> </classpath>
        print('Hello from embedded Javascript');
      </script>
      <echo message="End"/>
    </target>
</project>

다음과 같은 오류가 발생합니다.

build.xml:5: java.lang.IllegalAccessError: class jdk.nashorn.internal.codegen.types.Type (in unnamed module @0xeafc191) cannot access class jdk.internal.org.objectweb.asm.Type (in module java.base) because module java.base does not export jdk.internal.org.objectweb.asm to unnamed module @0xeafc191
        at jdk.nashorn.internal.codegen.types.Type.getInternalName(Type.java:282)
        at jdk.nashorn.internal.codegen.CompilerConstants.className(CompilerConstants.java:243)
        at jdk.nashorn.internal.codegen.CompilerConstants.staticCallNoLookup(CompilerConstants.java:372)
        at jdk.nashorn.internal.codegen.types.BooleanType.<clinit>(BooleanType.java:70)
        at jdk.nashorn.internal.codegen.types.Type.<clinit>(Type.java:669)
        at jdk.nashorn.internal.codegen.CompilerConstants.className(CompilerConstants.java:243)
        at jdk.nashorn.internal.codegen.CompilerConstants.virtualCall(CompilerConstants.java:551)
        at jdk.nashorn.internal.codegen.CompilerConstants.virtualCall(CompilerConstants.java:536)
        at jdk.nashorn.internal.runtime.ScriptObject.<clinit>(ScriptObject.java:141)
        at jdk.nashorn.internal.runtime.Context.newGlobalTrusted(Context.java:819)
        at jdk.nashorn.internal.runtime.Context.newGlobal(Context.java:636)
        at jdk.nashorn.api.scripting.NashornScriptEngine$2.run(NashornScriptEngine.java:275)
        at jdk.nashorn.api.scripting.NashornScriptEngine$2.run(NashornScriptEngine.java:271)
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:312)
        at jdk.nashorn.api.scripting.NashornScriptEngine.createNashornGlobal(NashornScriptEngine.java:271)
        at jdk.nashorn.api.scripting.NashornScriptEngine.<init>(NashornScriptEngine.java:108)
        at jdk.nashorn.api.scripting.NashornScriptEngine.<init>(NashornScriptEngine.java:82)
        at jdk.nashorn.api.scripting.NashornScriptEngineFactory.getScriptEngine(NashornScriptEngineFactory.java:139)
        at java.scripting/javax.script.ScriptEngineManager.getEngineByName(ScriptEngineManager.java:241)
        at org.apache.tools.ant.util.optional.JavaxScriptRunner.createEngine(JavaxScriptRunner.java:193)
        at org.apache.tools.ant.util.optional.JavaxScriptRunner.evaluateScript(JavaxScriptRunner.java:141)
        at org.apache.tools.ant.util.optional.JavaxScriptRunner.executeScript(JavaxScriptRunner.java:82)
        at org.apache.tools.ant.taskdefs.optional.Script.execute(Script.java:53)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:567)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
        at org.apache.tools.ant.Task.perform(Task.java:350)
        at org.apache.tools.ant.Target.execute(Target.java:449)
        at org.apache.tools.ant.Target.performTasks(Target.java:470)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1391)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
        at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1254)
        at org.apache.tools.ant.Main.runBuild(Main.java:830)
        at org.apache.tools.ant.Main.startAnt(Main.java:223)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:284)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:101)

ANT 1.8.4 및 ANT 1.10.5를 사용하는 경우.

그래서 내 질문은 다음과 같습니다. 내가 뭘 잘못하고 있습니까? 아니면이 버그가 나중에보고해야하는 Java 16 빌드의 버그입니까? 제안 된 해결 방법이 있습니까?

아틸라 세게 디

독립형 Nashorn 클래스는 org.openjdk.nashorn패키지에 있습니다. Java-15 이전 Nashorn 클래스는 jdk.nashorn패키지에 있으므로 Java 14 또는 이전 버전과 함께 제공되는 클래스를 선택하게됩니다.

실제로 Clojars에서 호스팅되는 이름으로 2013 년에 Nashorn의 어떤 버전을 사용하고 계십니까? 나는 그것이 무엇인지조차 모른다. 그것은 독립형 라이브러리로 재 패키징 된 JDK 내장 클래스의 일부 버전이라고 생각한다.

현재 지원되는 독립형 Nashorn을 얻으려면 https://github.com/openjdk/nashorn/#getting-started 에서 Maven Central 링크 및 기타 리소스로 이동하십시오. 시도해보고 효과가 있는지 알려주십시오. 추가해야 할 일부 JAR 종속성 (특히 ASM)이 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관