目錄
自定義腳本插件
自定義一個腳本插件比較簡單,直接在build.gradle中定義即可
首先需要在dependencies中加入依賴
dependencies {
compile gradleApi()
compile localGroovy()
}
然后創(chuàng)建Plugin
class ScriptPlugin implements Plugin<Project>{
@Override
void apply(Project project) {
project.task("ScriptTask"){
doLast {
println("我是腳本插件")
}
}
}
}
//應(yīng)用Plugin
apply plugin:ScriptPlugin
完整代碼如下
plugins {
id 'groovy'
id 'java'
}
group 'com.itfitness'
version '1.0'
archivesBaseName = 'test-plugin'
repositories {
mavenCentral()
}
dependencies {
compile gradleApi()
compile localGroovy()
}
class ScriptPlugin implements Plugin<Project>{
@Override
void apply(Project project) {
project.task("ScriptTask"){
doLast {
println("我是腳本插件")
}
}
}
}
//應(yīng)用Plugin
apply plugin:ScriptPlugin
執(zhí)行ScriptTask結(jié)果如下
自定義buildSrc插件
這種方式需要在項目中新建一個module名字就叫buildSrc,創(chuàng)建后可能有如下報錯
這個時候需要找到項目的setting.build文件,將里面的include 'buildSrc'刪除
然后我們調(diào)整buildSrc目錄下的build.gradle文件如下所示
plugins {
id 'groovy'
id 'java'
}
dependencies {
compile gradleApi()
compile localGroovy()
}
然后我們在buildSrc下新建src/main/grovvy和src/main/resources目錄
然后我們在groovy目錄中創(chuàng)建自己的包目錄和Plugin文件
BuildSrcPlugin如下所示
package com.itfitness.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
class BuildSrcPlugin implements Plugin<Project>{
@Override
void apply(Project project) {
project.task("BuildSrcTask"){
doLast {
println("我是buildSrc插件")
}
}
}
}
然后我們可以在項目的build.gradle中引用
//應(yīng)用buildSrc插件
apply plugin: BuildSrcPlugin
執(zhí)行插件中定義的BuildSrcTask任務(wù)結(jié)果如下
此外還有可以通過配置Plugin的id來引用插件的方式,如下在resources文件夾下建立META-INF/gradle-plugins目錄并在里面新建<plugin的id>.properties文件(我這里的plugin的id設(shè)置為了com.itfitness.plugin):
然后在文件里配置好Plugin所在的類
implementation-class=com.itfitness.plugin.BuildSrcPlugin
這樣就可以通過id來引入Plugin了
plugins {
id 'groovy'
id 'java'
////應(yīng)用buildSrc插件(通過id)
id 'com.itfitness.plugin'
}
這時我們同步下gradle可能會發(fā)現(xiàn)如下報錯
這個錯誤我也是查了好久才明白怎么回事,原因就是你新建META-INF/gradle-plugins文件夾的時候IDE把文件夾合并了
這個需要我們給他手動分開轧钓,分開后再同步就OK了,執(zhí)行結(jié)果與上面的一致
自定義獨立插件
獨立插件有個好處就是可以打包給別人使用锐膜,首先也是需要建立一個module毕箍,然后調(diào)整build.gradle文件
plugins {
id 'groovy'
id 'java'
id 'maven'
}
repositories {
mavenCentral()
}
dependencies {
compile gradleApi()
compile localGroovy()
}
group='com.itfitness.moduleplugin' //組名
version='1.0.0' //版本號
archivesBaseName='module-plugin' //工程名
//生成本地庫
uploadArchives{
repositories {
mavenDeployer{
repository(url: uri('../ModulePlugin'))
}
}
}
接下來src中創(chuàng)建Plugin文件和配置文件與buildSrc的一樣,如下所示
ModulePlugin文件:
package com.itfitness.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
class ModulePlugin implements Plugin<Project>{
@Override
void apply(Project project) {
project.task("ModuleTask"){
doLast {
println("我是獨立插件")
}
}
}
}
com.itfitness.moduleplugin.properties文件:
implementation-class=com.itfitness.plugin.ModulePlugin
然后我們打開右側(cè)的gradle視圖找到uploadArchives任務(wù)雙擊執(zhí)行
或者直接在Module的build.gradle文件中執(zhí)行uploadArchives任務(wù)
執(zhí)行成功后道盏,當(dāng)前項目下就生成了ModulePlugin目錄而柑,里面就是生成的可以供別人使用的插件
使用方式如下,在項目的build.gradle文件中配置buildscript
buildscript {
repositories {
maven {
url uri('./ModulePlugin')
}
}
dependencies {
//與插件module中的build.gradle配置的要一一對應(yīng)
classpath 'com.itfitness.moduleplugin:module-plugin:1.0.0'
}
}
然后在Module中引入插件(注意不能直接在項目的build.gradle中引入荷逞,會提示錯誤)媒咳,我這里在plugin的build.gradle文件中引入插件
plugins {
id 'groovy'
id 'java'
id 'maven'
//應(yīng)用獨立插件
id 'com.itfitness.moduleplugin'
}
執(zhí)行插件中創(chuàng)建的ModuleTask結(jié)果如下