Kirk True created CASSANDRA-7430:
------------------------------------

             Summary: generate-eclipse-files target on JDK 8 causes 
ReferenceError: "importClass" is not defined
                 Key: CASSANDRA-7430
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-7430
             Project: Cassandra
          Issue Type: Bug
         Environment: java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)

            Reporter: Kirk True


If I run {{ant generate-eclipse-files}} under JDK 8, I get this error:

{noformat}
BUILD FAILED
/Users/kirk/dev/cassandra/build.xml:1449: javax.script.ScriptException: 
ReferenceError: "importClass" is not defined in <eval> at line number 2
        at 
jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:564)
        at 
jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:548)
        at 
jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:528)
        at 
jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:524)
        at 
jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:194)
        at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        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:292)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        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:435)
        at org.apache.tools.ant.Target.performTasks(Target.java:456)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
        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:1248)
        at org.apache.tools.ant.Main.runBuild(Main.java:851)
        at org.apache.tools.ant.Main.startAnt(Main.java:235)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
Caused by: <eval>:2 ReferenceError: "importClass" is not defined
        at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:56)
        at 
jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:318)
        at 
jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:290)
        at 
jdk.nashorn.api.scripting.NashornScriptEngine.__noSuchProperty__(NashornScriptEngine.java:274)
        at 
jdk.nashorn.internal.scripts.Script$engine._L35(nashorn:engine/resources/engine.js:37)
        at jdk.nashorn.internal.scripts.Script$\^eval\_.runScript(<eval>:2)
        at 
jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:498)
        at 
jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:206)
        at 
jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:378)
        at 
jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:546)
        ... 29 more
{noformat}

Apparently this is due to changes with the new Nashorn ECMAScript engine in the 
new JDK.

According to 
http://stackoverflow.com/questions/22503100/java-8-javascript-engine-backwards-compatibility,
 one way to solve this is thusly:

{noformat}
diff --git a/build.xml b/build.xml
index 02e1f98..245ca8e 100644
--- a/build.xml
+++ b/build.xml
@@ -1447,7 +1447,7 @@
        </path>
        <property name="eclipse-project-libs" 
refid="eclipse-project-libs-path"/>
        <script language="javascript"> <![CDATA[
-               importClass(java.io.File);
+               var File = java.io.File;
                jars = 
project.getProperty("eclipse-project-libs").split(project.getProperty("path.separator"));
                
                cp = "";
{noformat}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to