2010-07-09 57 views
6

Java編譯器提供了增量構建,所以javac也是ant任務。但其他大多數流程都沒有。如何通過Ant配置惰性或增量構建?

考慮到構建過程,它們將一些文件(源)集合轉換成另一組文件(目標)。

我能明顯2箱子這裏:

  1. Transformator 不能採取的源文件的一個子集,只有整套。在這裏,我們只能製作惰性版本 - 如果沒有修改源文件,我們會跳過處理。
  2. 變形器可以取源文件的一個子集併產生部分結果 - 增量構建

什麼是螞蟻內部,第三方擴展或其他工具來實現惰性和增量構建? 你能否提供一些廣泛的構建文件示例?

我對此感興趣,特別是使用GWT編譯器。

回答

1

與GWT相關,不可能執行增量構建,因爲GWT編譯器一次查看所有源代碼並優化和內聯代碼。這意味着沒有改變的代碼可以以不同的方式進行評估,例如,如果您開始使用未改變的類中的方法,則該方法在前一個編譯步驟中省略,但現在需要編譯進去。

+0

但是肯定有可能影響GWT模塊的輸出的NO代碼已經改變,因此模塊不需要重新編譯。影響輸出的變化是包含在樹中的任何內容 – 2011-10-16 10:55:42

+0

@Andrew否,不是必需的。因爲GWT編譯器會刪除所有未使用的代碼。所以如果你開始使用該模塊的方法,它將不可用。另外,因爲內聯優化發生在實際JavaScript生成之前。也許可以緩存中間結果,但我不確定這是否有效,因爲這些結果需要再次解釋並讀取/寫入磁盤,而不是保存在內存中。 – 2011-10-17 07:16:58

+2

但是如果自從上次編譯以來沒有Java源(用於生成JS輸出)發生了變化,那麼就不需要重新編譯任何東西,優化和內聯以及代碼刪除包括..... – 2011-12-01 16:23:08

5

uptodate任務是Ant對此問題的通用解決方案。它足夠靈活,適用於需要懶惰或漸進式編譯的大多數情況。

我和你有同樣的問題:我有一個GWT模塊作爲我的代碼的一部分,當我不需要的時候,我不想支付重新編譯它的(巨大的)成本。在我的情況下,解決方案看起來是這樣的:

<uptodate property="gwtCompile.mymodule.notRequired" 
    targetfile="www/com.example.MyGwtModule/com.example.MyGwtModule.nocache.js"> 
    <srcfiles dir="src" includes="**"/> 
</uptodate> 

<target name="compile-mymodule-gwt" unless="gwtCompile.mymodule.notRequired"> 
    <compile-gwt-module module="com.example.MyGwtModule"/> 
</target>