了解 Gradle 快取系統的基礎知識。

在本節中,您將

  • 開啟本地建置快取

  • 了解快取

  • 探索遠端建置快取

步驟 0. 開始之前

  1. 您在第 1 部分中初始化了您的 Java 應用程式。

  2. 您在第 2 部分中執行了幾個工作。

  3. 您在第 3 部分中了解了依賴管理。

  4. 您在第 4 部分中將外掛程式應用於您的應用程式。

  5. 您在第 5 部分中了解了增量建置。

步驟 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 檔案

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 - 使用增量建置且未重新執行的工作。

總結

  1. 首先,我們使用 build 工作來填充本地快取,其中包含工作輸入和輸出 — 我們可以想像這是一週前完成的。

  2. 然後,我們使用 clean 工作來模擬切換分支 — 覆寫先前的輸出。

  3. 最後,我們使用了 build 工作 — 與增量建置不同,先前的輸出儲存在本地快取中,並且可以重複使用。

Gradle 效率很高,尤其是在開啟本地建置快取的情況下。Gradle 將查看您機器上的快取目錄,以檢查可能已存在的輸出檔案。如果它們存在,它將複製其(輸出)結果到您的專案 build 目錄中,而不是執行該工作。

結果標籤 FROM-CACHE 讓使用者知道 Gradle 已從本地建置快取中提取工作結果。

本地 Gradle 建置快取位於

  • 在 Windows 上:%USERPROFILE%\.gradle\caches

  • 在 OS X / UNIX 上:~/.gradle/caches/

Gradle 將定期清理本地建置快取目錄,方法是移除最近未使用過的條目,以節省磁碟空間。

步驟 4. 了解遠端快取

除了開發人員機器上的本地建置快取外,Gradle 還可以利用多個開發人員可以使用的遠端建置快取。

遠端快取的想法是在遠端建置之間共用常用的建置工作輸出,以縮短建置時間。

當同時啟用遠端和本地快取時,建置輸出會先在本地快取中檢查。如果輸出在本地快取中不存在,則會從遠端快取下載,並儲存在本地快取中。

為了試用遠端建置快取,Gradle 為單一遠端建置快取節點提供了免費的 Docker 映像。對於生產級部署,建議使用 Develocity

下一步: 使用參考資料 >>