我尝试使用 nashorn-core:15.1.1.jar 和 Java 17(预发布 - build 27)运行我们产品的 ANT 版本,我得到:
BUILD FAILED
java.lang.ExceptionInInitializerError
at org.openjdk.nashorn.internal.runtime.Context.compile(Context.java:1509)
at org.openjdk.nashorn.internal.runtime.Context.compileScript(Context.java:1449)
at org.openjdk.nashorn.internal.runtime.Context.compileScript(Context.java:759)
at org.openjdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:528)
at org.openjdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:517)
at org.openjdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:395)
at org.openjdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:151)
at java.scripting/javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:262)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.apache.tools.ant.util.ReflectUtil.invoke(ReflectUtil.java:108)
at org.apache.tools.ant.util.ReflectWrapper.invoke(ReflectWrapper.java:81)
at org.apache.tools.ant.util.optional.JavaxScriptRunner.evaluateScript(JavaxScriptRunner.java:103)
at org.apache.tools.ant.util.optional.JavaxScriptRunner.executeScript(JavaxScriptRunner.java:67)
at org.apache.tools.ant.taskdefs.optional.Script.execute(Script.java:52)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at jdk.internal.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:392)
at org.apache.tools.ant.Target.performTasks(Target.java:413)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
at org.apache.tools.ant.Main.runBuild(Main.java:811)
at org.apache.tools.ant.Main.startAnt(Main.java:217)
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
at …Run Code Online (Sandbox Code Playgroud) 我们在一些 ANT 构建文件中使用嵌入式 javascript 代码,并将 Nashorn 功能内置到 Java 8+ 中。在 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>
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
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 …Run Code Online (Sandbox Code Playgroud)