2011-06-30 29 views
7

我有一個包含嵌入式JavaScript的螞蟻任務。我想有目標成功或失敗基於一些邏輯我在JavaScript運行:ant javascript failonerror

<target name="analyze"> 
    <script language="javascript"> 
    <![CDATA[ 
      importClass(java.io.File); 
      importClass(java.io.FileReader) 
      importClass(java.io.BufferedReader) 

      String.prototype.startsWith = function(str) { 
       return (this.indexOf(str) === 0); 
      } 

      String.prototype.endsWith = function(str) { 
       var lastIndex = this.lastIndexOf(str); 
       return (lastIndex != -1) && (lastIndex + str.length == this.length); 
      } 

      //setup the source directory 
      srcDir = project.getProperty("MY_HOME") + "/foo/src"; 

      if(srcDir.startsWith("/foo") { 
      //TARGET SHOULD PASS 
      } else { 
      //TARGET SHOULD FAIL 
      } 

    ]]> 
    </script> 
</target> 

回答

7

您可以通過Exit API使Ant退出,但會引發構建異常,從而導致堆棧跟蹤混亂。最乾淨的方法是設置在JavaScript中的屬性然後使用fail task測試:

的Javascript:

<fail if="javascript.fail.message" message="${javascript.fail.message}" /> 
+0

馬丁,這工作正是我想要的方式。你已經很好地回答了我所有的問題,我敬畏。 –

+0

如果可以的話,我會投這個答案5次。 –

+0

@Amir - 你太善良了。很高興能夠提供幫助,但抱歉,我並沒有想到早些時候寫出答案 - 工作進展順利。 –

2

另一個目標:

<target name="failme"><fail/></target> 

腳本:

`project.executeTarget("failme");` 

未經測試。 Documentation

+0

這似乎是聰明的:

project.setProperty("javascript.fail.message", "There was a problem"); 

蟻后,馬上腳本任務。當我測試它時,我得到了類似於:WrappedException:沒有消息。不知道該怎麼辦? –

+0

這似乎工作,但引發ScriptException。我希望腳本無例外地執行,目標本身也會失敗。有沒有辦法從我的腳本傳播一個布爾備份到螞蟻? –

+0

這在技術上有效,+1。 –