2012-04-12 103 views

回答

0

對於您的任務,您想調用Move任務。所以你想移動一些文件。

  1. 通常,當您使用Java進行編碼時,應避免調用內置的Ant任務,因爲它們通常性能較差。例如,您可以使用來自java.io.FileFile.renameTo()方法或從java.nio.file.Files(僅限JDK7)使用Files.move()

  2. 如果您確實想要利用某些Ant東西(如<fileset>),您可能希望您的任務能夠將Move任務作爲構建xml中的嵌套任務。只需將您的任務設爲TaskContainer並在其方法中進行一些過濾。

  3. 當然,您也可以導入移動任務,設置所有需要的屬性,並調用它的​​方法。但我不喜歡那樣。

+0

感謝您的答覆coolcfan。我去了File.renameTo,然後遇到遞歸問題。所以我將該邏輯轉移到ANT中,並使用任務。 – 2012-04-26 21:44:14

+0

請原諒我的問題,但我不明白如何從gradle調用任務,我在build.xml中有'任務'任務,我想在gradle的文件中寫入一個任務並將其放入執行某些內容,我怎麼做? somthing.execute()? – mautrok 2014-07-18 13:40:04

+0

@mautrok不知道我自己,但對於Java,你可以'Something sth = new Something()',和'sth.setXXX(xxx)'然後'sth.execute()'。 – coolcfan 2014-07-19 15:11:58

0

上面的答案不能回答原來的問題「你能從一個自定義的Ant任務中執行一個Ant任務嗎?」

答案肯定是肯定的。

以下是複製的示例。移動是相似的。雖然File.renameTo()可能比調用Ant移動任務有更好的性能,但您肯定有可能想要從自定義Ant任務中調用Ant任務,尤其是在沒有合適的JRE替代方案的情況下。 Ant API非常廣泛,並提供了大量有用的任務。此外,您可能需要從不同的自定義Ant任務中調用自定義Ant任務。

又見http://www.jajakarta.org/ant/ant-1.6.1/docs/ja/manual/api/org/apache/tools/ant/taskdefs/package-summary.html

import org.apache.tools.ant.types.FileSet; 
import org.apache.tools.ant.taskdefs.Copy; 
... 
// set up the Strings inputPath and outputPath appropriately... 
... 
try{  
    FileSet inputSet = new FileSet();  // what to copy FROM 
    inputSet.setDir(new File(inputPath)); 
    Copy copyTask = new Copy(); 
    copyTask.setProject(getProject()); 
    copyTask.setTodir(outputPath);  // where to copy TO 
    copyTask.setFailOnError(true); 
    copyTask.addFileset(inputSet); 
    copyTask.execute(); 
} 
catch(Exception e){ 
    String msg = "Exception while invoking Copy task with inputPath=\"" + inputPath + "\" and outputPath=\"" + outputPath + "\": " + e.toString(); 
    throw new BuildException(msg, e); 
}