2011-02-16 58 views
2

螞蟻螞蟻清理我與這些目標的構建文件:
INIT <-- CLEAN <-- COMPILE <-- TEST如果不是UPTODATE

我想從以前的版本刪除不必要的文件,以保持編譯環境的清潔。
問題是,在測試階段,我想檢查測試源是否與測試類最新,所以我不運行測試。要檢查,我需要最後生成的類與源文件進行比較,就像這樣:

<uptodate property="tests.unnecessary"> 
    <srcfiles dir="src" includes="**/*.java"/> 
    <mapper type="glob" from="*.java" to="${build.dir}/classes/*.classes"/> 
</uptodate> 

所以我想檢查檢查是必要的和:
- 運行重新如果是這樣,清潔類和編譯和測試;
- 如果不是,不要做任何事情。

我該怎麼做?

回答

4

uptodate task的例子很接近 - 您可能需要調整映射器並注意絕對路徑和相對路徑。也許:

<uptodate property="tests.unnecessary"> 
    <srcfiles dir="src" includes="**/*.java"/> 
    <mapper type="glob" from="*.java" to="../${build.dir}/classes/*.class"/> 
</uptodate> 

注意在映射to=屬性.. - 想必build.dir是在目錄層次結構src同一水平。另請注意,編譯後的類的擴展名爲.class,而不是'.classes'。

一旦運行了上述內容,就可以使用Ant targetsif/unless屬性來控制執行。有很多方法,最基本的方法可能如下所示。當運行ant test時,Ant將確定是否有文件過時,如果不是,則跳過clean,編譯並測試。另一種方法可能是使用antcall task從單個目標中調用一系列目標調用。

<target name="check" depends="init"> 
    <uptodate property="tests.unnecessary"> 
     <srcfiles dir="src" includes="**/*.java"/> 
     <mapper type="glob" from="*.java" to="${build.dir}/classes/*.class"/> 
    </uptodate> 
</target> 

<target name="init"> 
    <echo message="Running init" /> 
</target> 

<target name="clean" depends="check" unless="tests.unnecessary"> 
    <echo message="Running clean" /> 
</target> 

<target name="compile" depends="clean" unless="tests.unnecessary"> 
    <echo message="Running compile" /> 
</target> 

<target name="test" depends="compile" unless="tests.unnecessary"> 
    <echo message="Running test" /> 
</target> 
+0

謝謝。這是我正在尋找..:D – alem0lars