我想知道如果希望我的編譯任務是增量式的,那麼可以使用具有傳遞依賴性的文件來管理自定義編譯步驟的最佳方法。這裏是特定的用例:我有一個完整的模板目錄(在這裏是句柄模板)。可以說這些在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目錄中的文件到直接或間接依賴於它的頁面中的模板的映射。因此,如果IncrementalTaskInputs.outOfDate包含,例如,包含/ E我知道我需要重新編譯A.到目前爲止這麼好,但我不清楚實際工作的最佳方式。
將依賴關係僅存儲在內存中將不起作用,因爲deamon可能會重新啓動或者甚至可能不會運行(並且我不完全清楚哪些對象在運行之間在deamon中的內存中存活)。據我瞭解,Gradle維護某種緩存,以便能夠計算正確的IncrementalTaskInputs,並知道,例如,只包含自上次運行以來更改的/ E。所以我不知何故需要維護一個依賴關係緩存,以便在必要時讀取磁盤。我可以通過將它們寫入文件來手動執行此操作,但似乎很容易出錯。例如,一個錯誤的Ctrl-C可能會讓我的緩存與Gradle的緩存過時。我猜想有一個內置的系統,可以讓我簡單地聲明依賴關係,並讓Gradle負責將它保留在自己的緩存中。或者更好的是,也許有一個現有的基類處理這種事情,我所要做的就是聲明什麼是依賴關係?有這樣的事情嗎?