Gradle 自定义插件

Gradle 自定义插件

官方原文

gradle学习官方翻译网站

1.新建项目

配置build.gradle

//使用官方的 `groovy` 插件
apply plugin: 'groovy'

//添加api依赖
dependencies {dependencyHandler ->
    dependencyHandler .compile gradleApi()
   dependencyHandler. compile localGroovy()
}
//添加当前使用的gradle版本为2.1.3
dependencies { DependencyHandler dependencyHandler ->
    dependencyHandler.compile 'com.android.tools.build:gradle:2.1.3'
    //dependencyHandler.compile fileTree()
}




创建资源

注意,红框内的两者名保持一致!


Gradle 自定义插件
image.png

2.新建pluginLaunch类

 class MyPluginLaunch implements Plugin<Project> {

    /**
     * 因为是遍历 List 顺序添加的,所以可以在 Plugin 中通过先后顺序一一添加
     registerTransform 方法第二个参数是 dependsOn, 可以手动设置依赖关系
     * @param project
     */

    @Override
    public void apply(Project project) {

              ZDMLogger.i('Project enable MyPluginLaunch plugin')

        project.extensions.create("ccjReleaseInfo",ReleaseInfoExtension)        //创建扩展属性

        project.tasks.create("ccjReleaseTask",ReleaseInfoTask) //创建自定义任务

    }

}



3.新建自定义属性类Extension

该属性可以在gradle中直接使用类似于android{}

class ReleaseInfoExtension extends Extension {

    String versionName
    String versionCode
    String versionInfo
    String fileName


    @Override
    public String toString() {
        return "ReleaseInfoExtension{" +
                "versionName='" + versionName + '\'' +
                ", versionCode='" + versionCode + '\'' +
                ", versionInfo='" + versionInfo + '\'' +
                ", fileName='" + fileName + '\'' +
                '}'
    }
}


4.新建自定义Task

用来处理自定义属性ReleaseInfoExtension中的变量


class ReleaseInfoTask extends DefaultTask{

    ReleaseInfoTask() {
        group='zdmrouter'
        description='the realeaseInfo Task of zdm router'
        mustRunAfter()
    }

    /**
     * 在doFitst 和doLast中间执行
     */
    @TaskAction
    void doAction (){

        updateInfo()
    }




    private void updateInfo(){

        String versionCodeMsg=project.extensions.getByName("ccjReleaseInfo").versionCode //其中ccjReleaseInfo为在launcher中定义的变量

        ZDMLogger.i( "ReleaseInfoTask.updateInfo.versionCodeMsg>>>>"+versionCodeMsg)



    }

}

5.将plugin 发布到jcenter 或者自己搭建的服务器仓库地址.然后进行依赖

//在root项目中的dependencies中
        classpath 'com.smzdm:zdm_router_register:1.1.0'


//然后,在使用的地方,;类似于依赖Android插件一样.依赖自己的插件
apply plugin: 'com.smzdm.android.router.register'



6.依赖完成后,可以在apply自定义插件的gradle中进行

配置自定义属性

ccjReleaseInfo {

    versionName = "1.0"
    versionCode = 1
    versionInfo = "versionInfo>>ccjReleaseInfo"
}

运行自定义Task

gradle ccjReleaseTask

或者在gradle面板中直接调用

Gradle 自定义插件
image.png
上一篇:使用NuGet将我们的ASP.NET Core类库打包并将程序包(类库)发布到NuGet平台上进行管理


下一篇:【卡卡谈Java】Java泛型