Gradle入門詳解


簡述

  Gradle是一種自動化構建工具,在同領域的產品有Ant和Maven。Gradle可以用Groovy或Kotlin編寫的DSL來幫助我們構建。

構建

  構建就是把代碼文件轉化為可在計算機獨立運行的軟件制品的過程,以java為例,構建分為:編譯和打包的操作

  如果人工進行構建的話需要用到javac、jar等命令,且構建過程比較繁瑣,也容易出錯,這時就需要自動化構建工具幫我們進行自動構建

Demo

  下面將演示用gradle來從零開始構建項目,我們創建好項目之后可以在命令行中使用 gradle init 命令來初始化項目,然后可以進行相應的選項

  選擇哪種語言來編寫DSL,一般選Groovy

 

  選擇哪種測試框架,這里選JUnit5也就是4選項

 

   填寫好項目名和包名后,gradle就完成了項目的初始化生成

  使用 gradle build 命令即可完成一次項目構建

Gradle Wrapper

  我們來考慮下面兩個問題:

    1.如何保證大家本地安裝的Gradle版本的一致性?

    2.服務器端構建,分配到的服務器沒有安裝Gradle,如何進行構建?

  Gradle Wrapper則是用來解決上面兩個問題的方案——把gradle裝進盒子里,這個盒子就是wrapper

  當你需要某個版本的gradle的時候,gradle wrapper就會去gradle的官方服務器下載對應版本

  

  在項目的gradle-wrapper.properties配置文件我們可以看到,gradle的遠程下載地址,以及本地的存放地址(前兩行的地址拼接)

  這樣通過配置文件配置gradle就解決了上面兩個問題,我們把這個配置文件push到倉庫,同事拉去下來也就制定好了gradle的版本,同時如果機子沒有gradle的話會自動去下載

Task

  在gradle中task就是一系列的操作任務,例如我們有如下五種常見的task

clean 清理構建產物(./gradlew clean)
build 執行構建(./gradlew build)
test 運行測試(./gradlew test)
tasks 查看所有tasks(./gradlew tasks)
help 查看幫助信息(./gradlew help --task build)

  task的執行也是有依賴的,即一個大的task會有幾個小的task構成

  

  使用./gradlew xxx --dry-run命令即可查看名字為xxx的task命令的構成

  如果./gradlew build -x test

依賴管理

  在build.gradle文件里我們可以進行項目的依賴管理,我們只需往dependencies里添加我們需要的類庫的坐標即可

  需要注意的是坐標前的關鍵字不同會產生不同的效果

api 能訪問依賴庫所依賴的庫的方法
implementation 依賴的庫只能自己庫本身訪問,舉個例子,A依賴B,B依賴C,如果B依賴C是使用的implementation依賴,那么在A中是訪問不到C中的方法的
compileOnly 只在編譯的時候有效, 不參與打包
runtimeOnly 只在打包的時候有效,編譯不參與
testImplementation 在單元測試和打包測試apk的時候有效

  可以在https://mvnrepository.com/查詢你想使用的組件依賴

版本沖突問題

  如果你依賴了庫A的1.0版本,又依賴了庫B,這個庫B依賴了庫A的2.0版本,此時就發生了版本沖突問題

  1.我們可以手動去除沖突的依賴,在沖突的庫選一個進行exclue

implementation ('com.carlos.test:Test:1.0.0') {
    exclude group: "io.reactivex.rxjava2",module: "rxjava"
    // exclude group: "io.reactivex.rxjava2:rxjava:2.1.11"
}
implementation 'io.reactivex.rxjava2:rxjava:2.1.13'

  2.我們可以強制使用某版本依賴

configurations.all {
    resolutionStrategy {
        force 'io.reactivex.rxjava2:rxjava:2.1.13'
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM