Gradle Wrapper指南

1.概述

開發人員通常使用Gradle來管理項目的構建生命週期。對於所有新的Android項目,它都是構建工具的默認選擇。

在本教程中,我們將學習Gradle Wrapper,這是一個附帶的實用程序,可讓您更輕鬆地分發項目。

2.Gradle Wrapper

要構建基於Gradle的項目,我們需要在計算機中安裝Gradle。但是,如果我們安裝的版本與項目版本不匹配,我們可能會面臨許多不兼容的問題。

Gradle Wrapper(也簡稱為Wrapper解決了此問題。這是一個運行帶有聲明版本的Gradle任務的腳本。如果未安裝聲明的版本,則包裝程序將安裝所需的版本。

包裝器的主要優點是我們可以:

  • 無需先安裝Gradle,即可在任何計算機上使用Wrapper構建項目
  • 有一個固定的Gradle版本。這將在CI管道上產生可重用和更強大的構建
  • 更改包裝器定義即可輕鬆升級到新的Gradle版本

在接下來的部分中,我們將運行需要在本地安裝Gradle的Gradle任務。

2.1 生成包裝器文件

要使用包裝器,我們需要生成一些特定的文件。**我們將使用內置的Gradle任務(稱為wrapper.**請注意,我們只需要生成一次這些文件。

現在,讓我們在項目目錄中wrapper

$ gradle wrapper

讓我們看一下該命令的輸出:

搖籃包裝指南

讓我們看一下這些文件是什麼:

  • gradle-wrapper.jar包含用於下載gradle-wrapper.properties文件中指定的Gradle發行gradle-wrapper.properties
  • gradle-wrapper.properties包含Wrapper運行時屬性-最重要的是,與當前項目兼容的Gradle發行版
  • gradlew是使用包裝器執行Gradle任務的腳本
  • gradlew.batgradlew等效批處理腳本

默認情況下, wrapper任務會生成包裝器文件,該包裝器文件具有計算機上當前安裝的Gradle版本。如果需要,我們可以指定其他版本:

$ gradle wrapper --gradle-version 6.3

我們建議將Wrapper文件檢入到GitHub之類的源代碼控制系統中。這樣,我們確保其他開發人員無需安裝Gradle即可運行項目。

2.2 使用包裝器運行Gradle命令

我們可以通過更換運行與包裝物的任何任務搖籃gradle**gradlew .**

要列出可用任務,我們可以使用gradlew tasks命令:

$ gradlew tasks

讓我們看一下輸出:

Help tasks

 ----------

 buildEnvironment - Displays all buildscript dependencies declared in root project 'gradle-wrapper'.

 components - Displays the components produced by root project 'gradle-wrapper'. [incubating]

 dependencies - Displays all dependencies declared in root project 'gradle-wrapper'.

 dependencyInsight - Displays the insight into a specific dependency in root project 'gradle-wrapper'.

 dependentComponents - Displays the dependent components of components in root project 'gradle-wrapper'. [incubating]

 help - Displays a help message.

 model - Displays the configuration model of root project 'gradle-wrapper'. [incubating]

 outgoingVariants - Displays the outgoing variants of root project 'gradle-wrapper'.

 projects - Displays the sub-projects of root project 'gradle-wrapper'.

 properties - Displays the properties of root project 'gradle-wrapper'.

 tasks - Displays the tasks runnable from root project 'gradle-wrapper'.

gradle命令運行此任務時獲得的輸出相同。

3.常見問題

現在,讓我們看看在使用Wrapper時可能會遇到的一些常見問題。

3.1忽略所有jar文件的全局.gitignore

一些組織不允許開發人員將jar文件檢入其源代碼管理系統。通常,此類項目在全局.gitignore文件中具有一條規則,以忽略所有jar文件。因此, gradle-wrapper.jar文件未檢入git存儲庫。因此,包裝器任務無法在其他計算機上運行。在這種情況下,我們需要將gradle-wrapper.jar文件強制添加到git中

git add -f gradle/wrapper/gradle-wrapper.jar

同樣,我們可能有一個特定於項目的.gitignore文件,它忽略了jar文件。我們可以通過放寬.gitignore規則或通過強行添加包裝jar文件來修復它,如上所示。

3.2 缺少包裝器文件夾

檢入基於Wrapper的項目時,我們可能會忘記包括存在於gradle文件夾中wrapper但是正如我們在上面看到的, wrapper文件夾包含兩個關鍵文件: gradle-wrapper.jargradle-wrapper.properties.

如果沒有這些文件,則在使用包裝程序運行Gradle任務時會出現錯誤。因此,我們必須將wrapper文件夾檢入到源代碼管理系統中

3.3 刪除包裝文件

基於Gradle的項目包含一個.gradle文件夾,用於存儲緩存以加快Gradle任務的速度。有時,我們需要清除緩存以對Gradle構建問題進行故障排除。通常,我們刪除整個.gradle文件夾。但是,我們可能會將Wrapper gradle文件夾與*.gradle文件夾搞混,*然後將其刪除。之後,在嘗試使用包裝程序運行Gradle任務時,我們肯定會遇到問題。

我們可以通過從源頭獲取最新更改來解決此問題。或者,我們可以重新生成包裝器文件。

4.結論

在本教程中,我們了解了Gradle Wrapper及其基本用法。我們還了解了在使用Gradle Wrapper時可能會遇到的一些常見問題。