2011-08-08 62 views
14

是否有可能從字面上覆蓋目標或以某種方式模擬此目標?在Ant中覆蓋目標

所以,當我打電話

<target perform-after="release"> 
    <do-something /> 
</target> 

它會像這樣:

<target name="release"> 
    <antcall target="release" /> <!-- call previous version, not recursion --> 
    <do-something /> 
</target> 

我覺得它有一個意思,我將介紹在Android例如:

我們有在SDK文件夾({$SDK}/tools/ant/*.xml)中每build.xml一個.xml模板,這些文件包含在每個生成的build.xml for eac h項目。目前僅有-pre-compile,-pre-build-post-compile這些空洞且易於覆蓋的目標。但是,例如,沒有空的-post-release目標。谷歌建議在生成build.xml評論只是複製粘貼一個目標到我自己的build.xml,然後調整它。但是我認爲這並不好,因爲如果谷歌會在模板裏改變這個目標,我永遠不會知道我正在使用過時的版本。

回答

24

請參閱import任務的「Target overriding」部分或include任務的「Target rewriting」部分。總之,給普通的build.xml一個像「common」這樣的項目名稱,然後在antcall中使用「common.release」。

我會注意到,antcall並不完全相同,因爲它在運行時啓動一個新項目,這意味着由目標設置的變量稍後將不可見。我沒有這臺機器上測試螞蟻可用,但你可以嘗試這樣的事情,以避免antcall:

<target name="release" depends="common.release, -post-release"/> 
+1

酷,這就是我一直想要的東西,沒有人回答我的)謝謝! –

+1

它的工作,我確認。 –