2012-12-12 51 views

回答

5

是的,您可以很容易地從您的代碼中調用Ant任務。

下面是一個Ant任務如何擴展的例子:

import org.apache.tools.ant.Project; 
import org.apache.tools.ant.Target; 
import org.apache.tools.ant.taskdefs.Copy; 

public class MyCopyTask extends Copy { 
    public MyCopyTask() { 
     setProject(new Project()); 
     getProject().init(); 
     setTaskName("MyCopy"); 
     setTaskType("MyCopy"); 
     setOwningTarget(new Target()); 
    } 
} 

下面介紹如何在代碼中使用它:

MyCopyTask copier = new MyCopyTask(); 
copier.setFile(srcFile); 
copier.setTofile(toFile); 
copier.execute(); 

這裏有更多的一些信息:

+0

是什麼讓這比一個簡單的系統調用更好? – amphibient

+0

@foampile - 引用鏈接:它是跨平臺的,強大的,並受益於社區支持。此外,就像任何圖書館一樣,Ant Tasks包含了大量的選項,您可以使用它們來替代自己的選項。例如,通過複製任務,您可以輕鬆指定是否通過設置布爾字段來覆蓋現有文件。此外,當您進行「_simple_」系統調用時,會出現很多錯誤。我寧願讓Apache的代碼處理這些錯誤。我想快速思考執行scp時可能出錯的所有事情! – jahroy

+0

這裏是Copy Task的源代碼的鏈接...正如你所看到的,你可以利用的選項有_TONS_(我不想自己實現所有這些):http://www.docjar .com/html/api/org/apache/tools/ant/taskdefs/Copy.java.html – jahroy

0

這肯定會將Ant任務包含在Java代碼中。作爲最後的手段,我們已經完成了這個。一個問題是你可能會設置一些Ant特定的屬性(例如setProject)來讓任務實際工作。這可能會使它使用起來有點尷尬。另外,正如你所提到的,你可能需要Ant運行庫來運行它。

我的第一個建議是查看是否有方法直接調用實際的SCP代碼,而不需要Ant開銷。第二種方法是查找Java SCP庫或找出Ant scp任務正在使用的內容。有關更多示例,請參閱scp via java。最後的建議是如上所述包含Ant任務。

0

我想調用系統調用會比較簡單:

try { 
      Runtime.getRuntime().exec("ant scpTask"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
0

我覺得Runtime.getRuntime().exec("ant deploy");取決於您的操作系統,如果你只是在一個固定的操作系統上運行它,它確實是一個簡單和容易的方式得到什麼你要。 :)

相關問題