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

在本節中,您將

  • 開啟本機建置快取

  • 了解快取

  • 探索遠端建置快取

步驟 0. 開始之前

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

  2. 您已在 第 2 部分 執行多項工作。

  3. 您已在 第 3 部分 了解相依性管理。

  4. 您已在 第 4 部分 將外掛程式套用至您的應用程式。

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

步驟 1. 了解快取

增量建置是一項極佳的最佳化功能,有助於避免重複已完成的工作。如果開發人員持續在單一檔案中進行變更,則可能不需要重新建置專案中的所有其他檔案。

然而,當同一開發人員決定切換到上週建立的新分支時,會發生什麼事?檔案會重新建置,即使開發人員正在建置之前已建置過的內容。

這時建置快取就派上用場了。快取會儲存先前的建置結果,大幅減少在本地已建置過的內容的重新建置需求。

讓我們從為你的應用程式開啟本機建置快取開始。

步驟 2. 開啟本機建置快取

使用命令 ./gradlew :app:clean :app: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. 使用本機建置快取

執行建置工作以填入本機建置快取

$ ./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 發現沒有任何變更。然而,在背景中,本機建置快取已填入。

讓我們再次執行清除和建置

$ ./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

下一步: 使用參考文件 >>