我有一個現有的Ant項目,並希望通過避免重新構建已更新的組件來加快構建過程 。避免在Ant中重新構建必備組件
Ant允許您指定一個目標依賴於另一個目標,但是通過 默認情況下,每個先決條件始終都會重建,即使它已經達到 的日期。 (這是螞蟻和之間做出一個關鍵的區別在默認情況下,使 只能重新建立需要的時候目標 - 。也就是說,如果一些前提條件是 更新)
<uptodate property="mytarget.uptodate"> // in set.mytarget.uptodate task
...
</uptodate>
<!-- The prerequisites are executed before the "unless" is checked. -->
<target name="mytarget" depends="set.mytarget.uptodate" unless="mytarget.uptodate">
...
</target>
爲了讓螞蟻重新構建只有在必要時才需要先決條件,似乎在Ant中有兩個通用方法 。
第一種方法是使用uptodate
任務設置屬性。然後, 您的任務可以測試屬性,並只有在屬性設置爲(非) 時才構建。
<uptodate property="mytarget.uptodate"> // in set.mytarget.uptodate task
...
</uptodate>
<!-- The prerequisites are executed before the "unless" is checked. -->
<target name="mytarget" depends="set.mytarget.uptodate" unless="mytarget.uptodate">
...
</target>
一種替代第一種方法是使用outofdate
任務從螞蟻的contrib。 它更好,它只是一個目標,沒有單獨的屬性被定義爲 ;相比之下,過期需要單獨的目標來設置和 測試屬性。
第二種方法是使用<modified>
選擇器創建<fileset>
。它計算文件的MD5哈希值並選擇其MD5 與先前存儲值不同的文件。它是可選的設置
<param name="cache.cachefile" value="cache.properties"/>
選擇內;它默認爲「cache.properties」。下面是 一個例子複製src到DEST其內容的文件已經 改變:
<copy todir="dest">
<fileset dir="src">
<modified/>
</fileset>
</copy>
這些都不是很滿意,因爲它要求我寫一個過程螞蟻 代碼(避免重複建設)應該是自動的。
還有常春藤,但我不能從它的文檔中知道它是否提供 提供此功能。 Ivy文檔中的關鍵用例似乎是 從互聯網上下載子項目,而不是避免浪費 通過暫存單個項目的部分工作。 Maven提供類似的 功能,其文檔中突出顯示了相同的用例。 (將一個現有的非trivila項目移動到Maven據說是一場噩夢;相比之下,使用Maven開始greenfield開發更可口。)
有沒有更好的方法?
這將工作。它確實需要將我繼承的項目以精細的粒度完全重新設計,並在某些情況下重新構建爲非獨立實體的子項目。這是我所害怕的。 – mernst 2010-02-15 03:15:43
查看buildlist IVY任務。這可以根據各個項目組件的聲明依賴關係來控制整個項目的構建。 是的,您的項目需要重組,但是您可能會發現它會模擬構建過程並提高整體架構的可視性。這是一個個案調用 – 2010-02-17 10:00:25