GradleWrapper(Gradle包裝器)基本使用和常見問題

前言

Gradle WrapperGradle包裝器)是Gradle的一個特性,能夠經過包裝器指定項目構建時使用的Gradle版本。app

這一特性能夠確保同一個項目組的人員構建環境是一致的(maven無此特性)maven

介紹

Gradle Wrapper結構

通常Gradle項目初始化(執行gradle init)後都會帶有Gradle Wrapper。其關鍵結構在項目的根目錄下,以下所示(省略與Gradle Wrapper無關的文件):gradle

├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar  
│       └── gradle-wrapper.properties
├── gradlew  
├── gradlew.bat

gradle/wrapper目錄下就是Gradle Wrapper了。其中ui

  • gradle-wrapper.jar就是下載項目構建使用的Gradle的下載器
  • gradle-wrapper.properties就是就是Gradle Wrapper的配置文件了

gradlewgradlew.bat則分別是UNIXWindows環境下調用包裝器的腳本url

配置文件詳解

gradle-wrapper.properties內部只有4個配置項,以下所示操作系統

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
  • distributionBase指的是發佈(能夠類比mavenpackage)的根目錄,其中GRADLE_USER_HOME是系統變量或者環境變量
  • distributionPath指的是發佈的相對地址(相對distributionBase
  • distributionUrl指的是下載Gradle的地址
  • zipStoreBase指的是壓縮zip包的根目錄
  • zipStorePath指的是壓縮zip包的相對地址(相對zipStorePath

使用

使用Gradle Wrapper下載Gradle

在項目根目錄下直接運行gradlew build或者gradlew.bat build(根據操做系統自行選擇)就會自動下載項目須要使用的Gradle(本地仍是須要安裝Gradle哦)了code

修改Gradle Wrapper配置

可能會有人吐槽,只要改好配置文件以後執行gradlew build或者gradlew.bat build。可是Gradle自己也提供了指令進行配置的更新和自動讓新配置生效,下面的演示是基於UNIX系統,Winodos系統請自行切換到gradlew.batip

  1. 更新Gradle Wrapper使用的Gradle版本(可升級別也可降級):gradlew wrapper --gradle-version 4.9
  2. 更新GradleGradle Wrapper使用的Gradle類型(分爲allbin,默認是binbin是執行包,all則是完整包):gradlew wrapper --distribution-type all
  3. 更新下載Gradle的地址(除非是須要使用私庫,否則不太建議使用):gradlew wrapper --gradle-distribution-url https\://services.gradle.org/distributions/gradle-4.9-bin.zip

上面的指令中的gradlew也能夠使用gradle代替,表示使用本機安裝的Gradle來處理it

常見問題

  1. 若是Gradle Wrapper相關文件缺失怎麼辦?

    在項目的根目錄下執行gradle wrapper就會自動建立相關文件。io

  2. 除了經過配置gradle-wrapper.properties還有什麼辦法指定項目的Gradle版本?

    能夠在build.gradle文件如下配置便可:

    wrapper {
        distributionUrl = https://services.gradle.org/distributions/gradle-4.9-all.zip
        distributionType = Wrapper.DistributionType.ALL
    }
相關文章
相關標籤/搜索