自定義Gradle插件

用idea新建一個工程


image.png

新建3個groovy文件


image.png

內(nèi)容分別是

這個類是插件的核心,文檔中定義到


image.png

image.png

意思就是:Plugin代表了一個功能的拓展。一個插件將一些配置應(yīng)用到一個目標(biāo)對象上。通常,這個目標(biāo)對象是一個項(xiàng)目,但是插件可以應(yīng)用于任何類型的對象。
其中apply方法就是將該插件應(yīng)用到指定project

package com.xys

import com.xys.task.DevWikiTask
import org.gradle.api.Plugin
import org.gradle.api.Project

class MainPluginForBuildSrc implements Plugin<Project> {

    @Override
    void apply(Project project) {
        //配置過后可以在目標(biāo)project中通過pluginsrc進(jìn)行一些配置
        project.extensions.create('pluginsrc', MyExtension)
        //創(chuàng)建一個自定義的任務(wù)
        project.tasks.create("devwikitask",DevWikiTask)
        project.task('hahahaha') << {
            println project.pluginsrc.message
        }
    }
}
package com.xys.task

import org.gradle.api.DefaultTask
import org.gradle.api.tasks.TaskAction

class DevWikiTask extends DefaultTask{

    DevWikiTask() {
        group = 'devwiki'
        description = 'devwiki first task'
    }

    @TaskAction
    def devwiki() {
        println "devwiki plugin: Hello World!"
    }
}
package com.xys
class MyExtension {
    String message
}

對resources目錄進(jìn)行配置


image.png

其中pluginsrc.properties前面的pluginsrc可以換成其他合法名字,這個名稱的目的就是在目標(biāo)工程中引用比如apply plugin: 'pluginsrc'

配置build.gradle文件

apply plugin: 'groovy'
apply plugin: 'maven'
//sourceCompatibility = 1.8

dependencies {
    compile gradleApi()
    compile localGroovy()
//    compile 'org.codehaus.groovy:groovy-all:2.3.11'//不注釋這句,就會報(bào)錯
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

repositories {
    mavenCentral()
}

group='pluginDemo'
version='2.0.0'
uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri('../../repo'))
        }
    }
}

我們通過maven在本地生成了repo目錄
路徑是當(dāng)前工程的上一級的上一級目錄,這樣就生成了對應(yīng)的repo

引用插件
建立一個工程


對應(yīng)的build.gradle為

group 'testplugin'
version '1.0-SNAPSHOT'

apply plugin: 'groovy'
apply plugin: 'java'
apply plugin: 'pluginsrc'

sourceCompatibility = 1.8
dependencies {
//    compile 'org.codehaus.groovy:groovy-all:2.3.11'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

buildscript {
    repositories {
        maven {
            url uri('../../../repo')
        }
    }
    dependencies {
        classpath 'pluginDemo:pluginDemo:2.0.0'
    }
}
pluginsrc2{
    message = 'hello gradle plugin'
}

其中注意,maven 中的目錄要一致,下面的classpath要注意了。

這個和之前的一致

group='pluginDemo'
version='2.0.0'

這個是pluginsrc.properties前面的名字

apply plugin: 'pluginsrc'

這個是使用我們的插件

pluginsrc2{
    message = 'hello gradle plugin'
}

當(dāng)引用成功后會有一個我們自定義的task


image.png

運(yùn)行就可以看到結(jié)果了

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容