了解 Gradle 快取系統的基礎知識。
步驟 1. 了解快取
增量建置是一種很棒的優化,有助於避免重複已完成的工作。如果開發人員持續在單一檔案中進行變更,則可能無需重建專案中的所有其他檔案。
但是,當同一個開發人員決定切換到上週建立的新分支時會發生什麼事?檔案會被重建,即使開發人員正在建置之前已經建置過的內容。
這就是建置快取有用的地方。快取儲存先前的建置結果,並大幅減少在已經在本機建置過的情況下重新建置的需求。
讓我們從為您的應用程式開啟本地建置快取開始。
步驟 2. 啟用本地建置快取
使用 ./gradlew :app:clean :app:build
命令執行 clean 工作,然後執行 build 工作
$ ./gradlew :app:clean :app:build
> Task :app:clean
> Task :app:compileJava
> Task :app:processResources NO-SOURCE
> Task :app:classes
> Task :app:jar
> Task :app:startScripts
> Task :app:distTar
> Task :app:distZip
> Task :app:assemble
> Task :app:compileTestJava
> Task :app:processTestResources NO-SOURCE
> Task :app:testClasses
> Task :app:test
> Task :app:check
> Task :app:build
BUILD SUCCESSFUL in 1s
8 actionable tasks: 8 executed
將 org.gradle.caching=true
新增至 gradle.properties
檔案
org.gradle.console=verbose
org.gradle.caching=true
步驟 3. 使用本地建置快取
執行 build 工作以填充本地建置快取
$ ./gradlew :app:build
> Task :app:compileJava UP-TO-DATE
> Task :app:processResources NO-SOURCE
> Task :app:classes UP-TO-DATE
> Task :app:jar UP-TO-DATE
> Task :app:startScripts UP-TO-DATE
> Task :app:distTar UP-TO-DATE
> Task :app:distZip UP-TO-DATE
> Task :app:assemble UP-TO-DATE
> Task :app:compileTestJava UP-TO-DATE
> Task :app:processTestResources NO-SOURCE
> Task :app:testClasses UP-TO-DATE
> Task :app:test UP-TO-DATE
> Task :app:check UP-TO-DATE
> Task :app:build UP-TO-DATE
BUILD SUCCESSFUL in 409ms
7 actionable tasks: 7 up-to-date
這裡沒有什麼驚喜,由於增量建置,Gradle 注意到沒有任何變更。但是,在背景中,本地建置快取已被填充。
讓我們再次執行 clean 和 build
$ ./gradlew :app:clean :app:build
> Task :app:clean
> Task :app:compileJava FROM-CACHE
> Task :app:processResources NO-SOURCE
> Task :app:classes UP-TO-DATE
> Task :app:jar
> Task :app:startScripts
> Task :app:distTar
> Task :app:distZip
> Task :app:assemble
> Task :app:compileTestJava FROM-CACHE
> Task :app:processTestResources NO-SOURCE
> Task :app:testClasses UP-TO-DATE
> Task :app:test FROM-CACHE
> Task :app:check UP-TO-DATE
> Task :app:build
BUILD SUCCESSFUL in 525ms
8 actionable tasks: 5 executed, 3 from cache
Gradle 讓我們知道每個工作在主控台輸出中的結果
-
FROM-CACHE
- 工作已從本地建置快取中提取。 -
UP-TO-DATE
- 使用增量建置且未重新執行的工作。
總結
-
首先,我們使用
build
工作來填充本地快取,其中包含工作輸入和輸出 — 我們可以想像這是一週前完成的。 -
然後,我們使用
clean
工作來模擬切換分支 — 覆寫先前的輸出。 -
最後,我們使用了
build
工作 — 與增量建置不同,先前的輸出儲存在本地快取中,並且可以重複使用。
Gradle 效率很高,尤其是在開啟本地建置快取的情況下。Gradle 將查看您機器上的快取目錄,以檢查可能已存在的輸出檔案。如果它們存在,它將複製其(輸出)結果到您的專案 build
目錄中,而不是執行該工作。
結果標籤 FROM-CACHE
讓使用者知道 Gradle 已從本地建置快取中提取工作結果。
本地 Gradle 建置快取位於
-
在 Windows 上:%USERPROFILE%\.gradle\caches
-
在 OS X / UNIX 上:~/.gradle/caches/
Gradle 將定期清理本地建置快取目錄,方法是移除最近未使用過的條目,以節省磁碟空間。
步驟 4. 了解遠端快取
除了開發人員機器上的本地建置快取外,Gradle 還可以利用多個開發人員可以使用的遠端建置快取。
遠端快取的想法是在遠端建置之間共用常用的建置工作輸出,以縮短建置時間。
當同時啟用遠端和本地快取時,建置輸出會先在本地快取中檢查。如果輸出在本地快取中不存在,則會從遠端快取下載,並儲存在本地快取中。
為了試用遠端建置快取,Gradle 為單一遠端建置快取節點提供了免費的 Docker 映像。對於生產級部署,建議使用 Develocity。
下一步: 使用參考資料 >>