前言
前面幾篇文章筆者對(duì)Gradle的一些基礎(chǔ)認(rèn)知,groovy基礎(chǔ)語(yǔ)法,以及Gradle 項(xiàng)目中常用的一些api進(jìn)行了講解。
今天筆者再來(lái)講解一些關(guān)于Gradle插件
的使用
1.定義
首先來(lái)講下Gradle
和Gradle插件
有啥區(qū)別?
Gradle
是一套構(gòu)建工具,其內(nèi)部構(gòu)建過(guò)程主要是以Project
組成一個(gè)樹形的生態(tài)系統(tǒng),整個(gè)構(gòu)建流程有自己的生命周期。每個(gè)Project又是由若干個(gè)Task組成。
Gradle插件
你可以理解為是運(yùn)行在Gradle
這套構(gòu)建系統(tǒng)上的單個(gè)task
,如 執(zhí)行腳本的編寫 ,字節(jié)碼插莊等,都可以依靠
Gradle
插件實(shí)現(xiàn)。我們常用的
Android Gradle Plugin
也是一個(gè)Gradle插件模塊:
應(yīng)用插件的ID:‘com.android.application’ 或者lib庫(kù):‘com.android.library’
2.有哪些優(yōu)勢(shì)
- 1.邏輯復(fù)用 :Gradle插件將一個(gè)公共模塊單獨(dú)的抽離出來(lái),然后上傳到共享平臺(tái),供其他項(xiàng)目使用
- 2.插件配置擴(kuò)展 :Gradle插件聲明插件擴(kuò)展,將插件內(nèi)部參數(shù)暴露給對(duì)應(yīng)的Project進(jìn)行配置,大大提高了插件的可擴(kuò)展性。
3.插件的形式
-
- build script :直接在build.gradle構(gòu)建腳本中創(chuàng)建對(duì)應(yīng)的插件,這種方式只對(duì)當(dāng)前Project有效,不支持對(duì)外提供調(diào)用,無(wú)復(fù)用性,一般不推薦使用
-
- buildSrc模塊 :這種方式是編譯器提供的特殊模塊,編譯器可以自動(dòng)識(shí)別該模塊的,對(duì)所有的Project可見。但是在項(xiàng)目外不可見,無(wú)法給其他工程使用,復(fù)用性差。
-
- 獨(dú)立插件項(xiàng)目 :替插件創(chuàng)建一個(gè)單獨(dú)的項(xiàng)目,這個(gè)項(xiàng)目可以單獨(dú)的打包成一個(gè)jar包,然后發(fā)布到企業(yè)服務(wù)器上供其他項(xiàng)目使用,通常這個(gè)插件中包含了一個(gè)或多個(gè)任務(wù)的組合,實(shí)現(xiàn)具體的插件功能
4.自定義插件實(shí)戰(zhàn)
下面我會(huì)以第三種形式來(lái)大家實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Gradle插件功能:
需求如下:
在編譯過(guò)程中實(shí)現(xiàn):將當(dāng)前編譯的版本信息發(fā)布到公司服務(wù)器上,可以在本地服務(wù)器上實(shí)時(shí)查看編譯的版本日志,通過(guò)日志的分析可以對(duì)當(dāng)前編譯版本進(jìn)行優(yōu)化。
步驟如下 :
- 1.初始化插件模塊目錄結(jié)構(gòu)
- 2.創(chuàng)建插件實(shí)現(xiàn)類
- 3.創(chuàng)建插件擴(kuò)展Bean
- 4.創(chuàng)建插件實(shí)現(xiàn)的任務(wù):上傳版本信息
- 5.將插件擴(kuò)展和插件任務(wù)集成到Project生命周期中
- 6.插件發(fā)布
- 7.插件引入
步驟1.初始化插件模塊目錄結(jié)構(gòu)
首先創(chuàng)建一個(gè)Java or Kotlin Library
的模塊,
步驟1創(chuàng)建.png
在創(chuàng)建的模塊build.gradle
中引入:
plugins {
id 'groovy' // Groovy Language
//id 'org.jetbrains.kotlin.jvm' // Kotlin
id 'java-gradle-plugin' // Java Gradle Plugin
}
- groovy :使用groovy語(yǔ)言開發(fā)
- org.jetbrains.kotlin.jvm :使用kotlin開發(fā)引入kotlin核心插件庫(kù)
- java-gradle-plugin :Gradle插件的一個(gè)輔助插件,可以在我們build目錄下自動(dòng)生成資源屬性
設(shè)置sourceSets
:
sourceSets {
main {
groovy {
srcDir 'src/main/groovy'
}
resources {
srcDir 'src/main/resources'
}
}
}
工程目錄結(jié)構(gòu)如下:
插件目錄結(jié)構(gòu).png
步驟2.創(chuàng)建插件實(shí)現(xiàn)類
class UploadVersionPlugin implements Plugin<Project>{
@Override
void apply(Project project) {
println "begin:now this is a ${project.name} 's upload plugin"
}
}
步驟3.創(chuàng)建插件擴(kuò)展Bean
class VersionInfo {
//版本名稱
String versionName
//版本代碼
int versionCode
//版本更新信息
String versionUpdateInfo
}
-
project
+關(guān)注
關(guān)注
0文章
35瀏覽量
13301 -
插件
+關(guān)注
關(guān)注
0文章
331瀏覽量
22458 -
gradle
+關(guān)注
關(guān)注
0文章
26瀏覽量
728
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論