例如假設一個項目正在編譯現在是編譯ordermgt 模塊的時候了根編譯文件(root build file)應該知道去調用ordermgt/buildxml 文件中一個Ant任務來完成這編譯而ordermgt/buildxml 文件應該確切的知道要編譯生成ordermgt jar 文件需要些什麼而且如果整個項目被編譯並合並入一個ear文件這個根buildxml 文件應該知道如何去構建
根buildxml 文件是怎麼知道要去編譯一個模塊並且以何種順序來編譯的呢?下面是一個Ant XML文件的一部分它顯示了buildxml文件是如何完成設定的目標的
<! ========================================= Template target Never called explicitly only used to pass calls to underlying children modules ========================================= > <target name=template depends=init> < Define the modules and the order in which they are executed for any given target This means _order matters_ Any dependencies that are to be satisfied by one module for another must be declared in the order the dependencies occur > <echo>Executing ${target} \ target for the core module…</echo> <ant target=${target} dir=core/> <echo>Executing ${target} \ target for the admin module…</echo> <ant target=${target} dir=admin/> …</target>
無論根buildxml 文件調用了哪個編譯目標都由這個template 目標負責以一定的順序傳遞給相應的子模塊例如如果我們想要清理整個工程我們應該只需在工程的根部調用clean 目標即可然後下面的任務將被執行
<! ========================================= Clean all modules ========================================= ><target name=clean depends=init> <echo>Cleaning all builds</echo> <antcall target=template> <param name=target value=clean/> </antcall></target>
根buildxml 文件通過直接調用template 目標來間接地實現調用clean 目標從而保證了所有模塊都被清理
上面的模塊組織和相關的編譯目標真地使管理源碼和編譯變得更容易了這種結構有助於你更快更容易地找到你想要的源碼而template 目標負責管理任務是如何執行的
但模塊結構最精彩的部分是這裡
在完成了整個工程的完整編譯後可以對任何模塊進行獨立的編譯只要在命令行中切換到該模塊目錄下並執行
> ant target
[] [] [] [] []
From:http://tw.wingwit.com/Article/program/Java/ky/201311/29254.html