Gradle学习三 :AS自定义Gradle插件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rambomatrix/article/details/85603011

一、定义插件

1.File-New Module-Android Library,取名plugin1

2.删除plugin1目录下所有文件,只保留build.gradle

编写build.gradle,代码如下:

apply plugin: 'groovy'
apply plugin: 'maven'

dependencies {
    compile gradleApi()//gradle sdk
    compile localGroovy()//groovy sdk
    compile 'com.android.tools.build:gradle:3.2.1'
}

repositories {
    mavenCentral()
}

3.编写插件代码:

<1>在plugin目录下新建Directory,命名src,在src下新建Directory命名main,在main下新建Directory命名groovy。此后groovy目录新建的groovy后缀文件将被默认为插件源码。

<2>在groovy目录新建package,命名com.zhp.plugin

<3>在包com.zhp.plugin下新建file,后缀.groovy,命名Plugin1,代码如下:

package com.zhp.plugin

import org.gradle.api.Plugin
import org.gradle.api.Project
import com.android.build.gradle.AppExtension
class Plugin1 implements Plugin<Project> {

    void apply(Project project) {
    	//在控制台打印一段文字,grrovy语法
        println "this is first gradle plugins"
        //在控制台打印一段文字,java语法。groovy是基于java扩展并完全兼容java语言。
        System.out.println("this is first gradle plugins too");
    }
}

关于groovy如何基于java语言扩展并且和java无缝混合开发,请参考文档

<4>在src/main目录下新建Directory命名为resources,在resources目录下新建Directory命名为META-INF,在META-INF目录下新建Directory命名为gradle-plugins,最后在gradle-plugins目录下新建file,命名为com.zhp.plugin.properties,文件内容:

implementation-class=com.zhp.plugin.Plugin1//指向src/main/groovy/com/zhp/plugin/Plugin1这个插件实现

二、发布插件

在plugin目录下的build.gradle文件加入如下代码:

group='com.zhp.plugin'
version='1.0.0'

uploadArchives {
    repositories {
        mavenDeployer {
            //提交到远程服务器:
            // repository(url: "http://www.xxx.com/repos") {
            //    authentication(userName: "admin", password: "admin")
            // }
            //提交到本地磁盘
            repository(url: uri('D:/maven_local'))
        }
    }
}

点击AS右侧Gradle按钮,展示了当前工程包含的所有gradle插件,其中就有刚才新建的plugin1,如下图所示:

在这里插入图片描述

点击uploadArchives,运行结果如下:

this is first gradle plugins
this is first gradle plugins too
:plugin1:compileJava NO-SOURCE
:plugin1:compileGroovy UP-TO-DATE
:plugin1:processResources UP-TO-DATE
:plugin1:classes UP-TO-DATE
:plugin1:jar UP-TO-DATE
:plugin1:uploadArchives

BUILD SUCCESSFUL in 1s
4 actionable tasks: 1 executed, 3 up-to-date
9:43:46: Task execution finished 'uploadArchives'.

查看本地磁盘,在d盘生成了maven_local,以后其他工程可以使用这个plugin插件。

在这里插入图片描述

三、使用插件

<1>在build.gradle的文件开始声明要应用的插件名称

apply plugin: 'com.zhp.plugin'//:后面的是插件的group名称。

<2>声明插件所在的地址,比如我们声明的插件是发布在本地磁盘d盘;同时声明对指定插件的依赖。

buildscript {
    repositories {
        mavenCentral()
        maven {
            url uri('D:/maven_local')
        }
    }
    dependencies {
        classpath 'com.zhp.plugin:plugin1:1.0.0'//group:name:version
    }
}

四、案例

<1>功能:通过javaassist为每一个构造方法增加一行日志,关于javaassist的使用可以参考

<2>代码地址

五、参考

[https://github.com/zhhp1121/GradlePlugin]
[https://blog.csdn.net/rambomatrix/article/details/78602614]
[http://www.blogjava.net/johnnyjian/archive/2011/04/26/349042.html]
[https://www.imooc.com/article/44169]

猜你喜欢

转载自blog.csdn.net/rambomatrix/article/details/85603011