2016-03-01 157 views
2

我想知道如果希望我的編譯任務是增量式的,那麼可以使用具有傳遞依賴性的文件來管理自定義編譯步驟的最佳方法。這裏是特定的用例:我有一個完整的模板目錄(在這裏是句柄模板)。可以說這些在pages目錄中。其中一些模板包含其他模板(把手部分)。可以說包含的模板在includes。編譯所有模板相當簡單。例如,我可以用把手命令像handlebars <input-file>編譯中的每個文件pages(如for (File file : srcDir) { project.exec { commandLine 'handlebars', file.name }}。自定義增量Gradle編譯任務的依賴關係

當叫車把命令編譯input-file,如有必要,拉起任何模板input-file包括任何的包括那些包括添加等等。不用進入不必要的細節,我也可以在編譯時學習模板的全部傳遞依賴關係,例如,如果模板A包含B和C,並且B在進程中包含E編譯AI會知道如果B,C或E發生變化,我需要重新編譯A.請注意,我非常需要編譯模板來學習這些信息,因爲我需要解析它並確定它包含的所有位置,如何包括解決方案等。

我想創建一個編譯文件的自定義增量任務,但只有在必要時。我知道如何聲明這個任務的輸入,並且我知道如何在內存中保存從includes目錄中的文件到直接或間接依賴於它的頁面中的模板的映射。因此,如果IncrementalTask​​Inputs.outOfDate包含,例如,包含/ E我知道我需要重新編譯A.到目前爲止這麼好,但我不清楚實際工作的最佳方式。

將依賴關係僅存儲在內存中將不起作用,因爲deamon可能會重新啓動或者甚至可能不會運行(並且我不完全清楚哪些對象在運行之間在deamon中的內存中存活)。據我瞭解,Gradle維護某種緩存,以便能夠計算正確的IncrementalTask​​Inputs,並知道,例如,只包含自上次運行以來更改的/ E。所以我不知何故需要維護一個依賴關係緩存,以便在必要時讀取磁盤。我可以通過將它們寫入文件來手動執行此操作,但似乎很容易出錯。例如,一個錯誤的Ctrl-C可能會讓我的緩存與Gradle的緩存過時。我猜想有一個內置的系統,可以讓我簡單地聲明依賴關係,並讓Gradle負責將它保留在自己的緩存中。或者更好的是,也許有一個現有的基類處理這種事情,我所要做的就是聲明什麼是依賴關係?有這樣的事情嗎?

回答

2

我也在Gradle開發者列表上發佈了這個。 Stefan Oehme回答了下面的答案,我相信這是正確的:

現在還沒有這種隨時可以重複使用的機制。我們已經爲Java增加了 編譯,並且打開內容的想法在內部已經進一步提高了 。但是我還沒有具體的計劃。

我不是這完全清楚對象運行之間生存在內存中的守護進程 反正

只要buildscript類路徑不改變,類搖籃調用之間生存 。不過,每個構建都會重新創建實例(如項目) 。所以作爲第一個鏡頭,你可以將東西存儲在 靜態變量中。如果缺少這個狀態,那麼你做一個完整的構建。那個 對於任何使用守護進程和你的插件的人已經有很大的幫助。