我在寫一個自定義Ant任務來處理一些業務邏輯,並且我想調用Move Ant任務。您可以從自定義Ant任務中執行Ant任務嗎?
我認爲我會使用Execute java類,但是我很難搞清楚它。
我是朝着正確的方向發展,還是你不能以螞蟻的方式從另一個類別調用一個類?
我在寫一個自定義Ant任務來處理一些業務邏輯,並且我想調用Move Ant任務。您可以從自定義Ant任務中執行Ant任務嗎?
我認爲我會使用Execute java類,但是我很難搞清楚它。
我是朝着正確的方向發展,還是你不能以螞蟻的方式從另一個類別調用一個類?
對於您的任務,您想調用Move
任務。所以你想移動一些文件。
通常,當您使用Java進行編碼時,應避免調用內置的Ant任務,因爲它們通常性能較差。例如,您可以使用來自java.io.File
的File.renameTo()
方法或從java.nio.file.Files
(僅限JDK7)使用Files.move()
。
如果您確實想要利用某些Ant東西(如<fileset>
),您可能希望您的任務能夠將Move
任務作爲構建xml中的嵌套任務。只需將您的任務設爲TaskContainer
並在其方法中進行一些過濾。
當然,您也可以導入移動任務,設置所有需要的屬性,並調用它的方法。但我不喜歡那樣。
上面的答案不能回答原來的問題「你能從一個自定義的Ant任務中執行一個Ant任務嗎?」
答案肯定是肯定的。
以下是複製的示例。移動是相似的。雖然File.renameTo()
可能比調用Ant移動任務有更好的性能,但您肯定有可能想要從自定義Ant任務中調用Ant任務,尤其是在沒有合適的JRE替代方案的情況下。 Ant API非常廣泛,並提供了大量有用的任務。此外,您可能需要從不同的自定義Ant任務中調用自定義Ant任務。
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);
}
感謝您的答覆coolcfan。我去了File.renameTo,然後遇到遞歸問題。所以我將該邏輯轉移到ANT中,並使用 任務。 –
2012-04-26 21:44:14
請原諒我的問題,但我不明白如何從gradle調用任務,我在build.xml中有'任務'任務,我想在gradle的文件中寫入一個任務並將其放入執行某些內容,我怎麼做? somthing.execute()? – mautrok 2014-07-18 13:40:04
@mautrok不知道我自己,但對於Java,你可以'Something sth = new Something()',和'sth.setXXX(xxx)'然後'sth.execute()'。 – coolcfan 2014-07-19 15:11:58