簡述
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'
}
}