前言
Gradle是以 Groovy 語(yǔ)言為基礎(chǔ)楣嘁,基于DSL(領(lǐng)域特定語(yǔ)言)面向Java 應(yīng)用的構(gòu)建工具。Gradle讓不可能變成可能马澈,讓構(gòu)建更優(yōu)雅、更容易勤婚。Gradle官網(wǎng)
為什么使用 Gradle
常見的構(gòu)建工具有Ant涤伐、maven等缨称。但它們都有一些缺點(diǎn):
Ant的缺點(diǎn)
依賴管理較弱祝迂,很容易變臃腫, XML作為構(gòu)建腳本Maven的缺點(diǎn)
比較精簡(jiǎn)型雳,但限制性太多,編寫插件擴(kuò)展麻煩沿量,XML作為構(gòu)建腳本。
而Gradle可以說是集大成者朴则,比Ant 語(yǔ)法精簡(jiǎn)钓简, 比Maven靈活,拋棄了XML的繁瑣配置外邓,極其強(qiáng)大的依賴管理,基于Groovy動(dòng)態(tài)語(yǔ)言而使得自定義行為十分方便拴魄。
Gradle
安裝Gradle
1.官網(wǎng)下載
2.安裝指南
Gradle是什么
? Gradle是基于Groovy定義了一套DSL席镀,所謂DSL(領(lǐng)域?qū)S谜Z(yǔ)言),就是專門針對(duì)某一特定問題的計(jì)算機(jī)語(yǔ)言豪诲。而Gradle我們可以認(rèn)為是經(jīng)過“定制”的Groovy,專門用于項(xiàng)目構(gòu)建的語(yǔ)言服赎。Gradle構(gòu)建語(yǔ)言參考
Gradle學(xué)習(xí)— Task交播,Project,Plugin
要深入Gradle的話,要學(xué)的東西也不會(huì)少秦士,但是作為普通的開發(fā)者,個(gè)人覺得把三個(gè)概念搞懂就可以了:Task提针,Project,Plugin
- Project
在Gradle中,每一個(gè)project辐脖,Gradle都會(huì)創(chuàng)建一個(gè)Project對(duì)象,并將這個(gè)對(duì)象與構(gòu)建腳本相關(guān)聯(lián)艇抠。也就是說Project對(duì)象與build.gradle是一對(duì)一的關(guān)系炭剪,所以你在build.gradle寫的每一個(gè)配置其實(shí)就是它對(duì)應(yīng)的Project對(duì)象的一個(gè)方法或者一個(gè)變量值翔脱,譬如說我們android配置項(xiàng)目依賴:
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
}
- Task
Task表示一些需要執(zhí)行的構(gòu)建任務(wù).比如說lint檢查任務(wù)。定義一個(gè)Task可以這樣寫:
task hello << {
println "hello"
}
看起來挺莫名其妙的吧,還是從面向?qū)ο蠼嵌热グ焉厦娲a還原一下:
task("hello").leftShift({
println "hello"
})
(1)定義一個(gè)task相當(dāng)于調(diào)用了Project對(duì)象的task方法
(2)任務(wù)名是task方法的參數(shù)名
(3)<< 是Groovy的運(yùn)算符重載
從上述分析可知错妖,其實(shí)一個(gè)Task就是一個(gè)標(biāo)準(zhǔn)的Groovy函數(shù)調(diào)用
- Plugin
Gradle是一個(gè)框架疚沐,作為框架,它負(fù)責(zé)定義流程和規(guī)則亮蛔。而具體的編譯工作則是通過插件的方式來完成的究流。比如編譯Java有Java插件辣吃,編譯Groovy有Groovy插件芬探,編譯Android APP有Android APP插件,編譯Android Library有Android Library插件哩簿。舉個(gè)例子酝静,要引入Android APP插件,就需要在build.gradle引用Android APP插件:
buildscript {
repositories {
jcenter()//表示編譯過程中依賴的倉(cāng)庫(kù)
}
dependencies {
//依賴android開發(fā)的gradle插件,groupId:artifactId:version
classpath 'com.android.tools.build:gradle:1.5.0'
}
}
//應(yīng)用插件
apply plugin: 'com.android.application'
//配置插件屬性
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.test"
versionCode 1
versionName "1.0.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
Gradle進(jìn)階— 自定義插件
這一點(diǎn)后續(xù)再研究
Android Gradle使用
從上述可以得知宗苍,Android其實(shí)就是寫了兩個(gè)插件:com.android.application和com.android.library,應(yīng)用這兩個(gè)插件就可以實(shí)現(xiàn)Android APP和Android Library的構(gòu)建了亿遂,所以也沒啥好說的渺杉,不知道怎么配置挪钓?查文檔:Gradle Plugin用戶指南
這里簡(jiǎn)單分享一下jenkins + Gradle 構(gòu)建有用的經(jīng)驗(yàn):
- Build Variants(構(gòu)建變種版本)
Build Type + Product Flavor = Build Variant
Android通過Build Variants可以很方便構(gòu)建不同的版本碌上,滿足各種版本需求。
(1)Build Type: 構(gòu)建類型馏予,如debug,release霞丧,一般用于構(gòu)建不同類型提供團(tuán)隊(duì)內(nèi)部使用
(2)Product Flavor : 定制類型,一般用于區(qū)分渠道打包
android {
...
buildTypes {
debug{
...
}
release {
...
}
}
productFlavors {
sit{
...
}
prd{
...
}
}
}
assembleSitDebug,assemblePrdRelease
使用Gradle構(gòu)建一個(gè)Java Web工程及持續(xù)集成環(huán)境Jenkins配置參考
小結(jié)
我在上述并沒有對(duì)一些細(xì)節(jié)展開論述后豫,而僅僅個(gè)人認(rèn)為比較重要的點(diǎn)進(jìn)行了闡述挫酿,是因?yàn)槲矣X得對(duì)于Gradle的學(xué)習(xí)愕难,掌握理解Api很重要.