2012-09-05 18 views
0

在ant 1.8.2構建系統中,我使用的是依賴於<antcall/>的javascript。這使我產生了一個指向antcall的java.lang.NullPointerExceptionant:調用來自<script>的antcall拋出一個java.lang.NullPointerException異常

腳本:

<project default="main"> 
    <target name="main"> 
     <script language="javascript"> <![CDATA[ 
     task = project.createTask('macro'); 
     task.execute(); 
     ]]></script> 
    </target> 

    <macrodef name="macro"> 
     <sequential> 
      <antcall target="antcall" /> 
     </sequential> 
    </macrodef> 

    <target name="antcall"> 
     <echo>[antcall] succeed</echo> 
    </target> 

</project> 

的build.xml:11:顯示java.lang.NullPointerException(#3 ...)。堆棧跟蹤只談RhinoScriptEngine,不知道這是任何有幫助的

at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:153) 
at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:167) 
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
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 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
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:390) 
at org.apache.tools.ant.Target.performTasks(Target.java:411) 
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:809) 
at org.apache.tools.ant.Main.startAnt(Main.java:217) 
at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 
at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 

我的問題是: - 有人可以重現這個問題? - 我在做什麼明顯錯誤? - 任何螞蟻古魯周圍,以幫助我:-)

回答

3

我在Groovy中發現了一個錯誤報告,詳述了一個類似的問題http://jira.codehaus.org/browse/GROOVY-1506attached patch by Andreas Sahlbach通過將所有者分配給新創建的任務來解決了常規問題。

所以,我已經取得了進展,並補充說:

task.setOwningTarget(self.getOwningTarget()); 

這固定的問題。我已經把原來的腳本和固定的腳本放在了gist 3636007之內,這樣別人就可以玩了。

最終腳本下面是:

<project default="main"> 
    <target name="main"> 
     <script language="javascript"> <![CDATA[ 
     task = project.createTask('macro'); 

     if(task.getOwningTarget() == null) { 
      task.log("Assigning an owner ..."); 
      task.setOwningTarget(self.getOwningTarget()); 
      task.log("Task: " + task.getOwningTarget()); 
     } 

     try { 
      task.execute(); 
     } catch(err) { 
      task.log("Execution error: " + err.message); 
     } 

     ]]></script> 
    </target> 

    <macrodef name="macro"> 
     <sequential> 
      <antcall target="antcall" /> 
     </sequential> 
    </macrodef> 

    <target name="antcall"> 
     <echo>[antcall] succeed</echo> 
    </target> 

</project> 

所得執行是:

$ ant 
Buildfile: /Users/amusso/ant/bug/build.xml 

main: 
    [macro] Assigning an owner ... 
    [macro] Task: main 

antcall: 
    [echo] [antcall] succeed 

BUILD SUCCESSFUL 
Total time: 0 seconds 

\ O/

+0

我已經打開https://issues.apache.org/bugzilla/show_bug .cgi?id = 53831在ant issue tracker中。 –

相關問題