自定义 Gradle 插件学习记录

参考:https://juejin.im/entry/577bc26e165abd005530ead8


## 创建Model

1.在Android studio 中创建Model,切换到project模式;

2.删除model下的除build.gradle文件和src/main目录以外的所有文件,修改build.gradle文件,如下所示:

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

dependencies {
    compile gradleApi()
    compile localGroovy()
}

repositories {
    mavenCentral()
}

3.在main目录下创建groovy目录;

4.在groovy目录下新建包名,如com.banzhi.plugin,然后在该包下创建xxx.groovy文件,实现 org.gradle.api.Plugin 接口,内容如下:

package com.banzhi.myplugin

import org.gradle.api.Plugin
import org.gradle.api.Project


public class PluginDemo implements Plugin<Project> {

    @Override
    void apply(Project project) {
        System.out.println("========================");
        System.out.println("hello gradle plugin!");
        System.out.println("========================");
    }
}

5.在main目录下创建resources目录,然后在resources目录下创建META-INF目录,在META-INF目录下创建gradle-plugins目录,最后在gradle-plugins目录下创建properties文件,如:com.banzhi.myplugin.properties,而在其他build.gradle文件中使用自定义的插件时候则需写成:apply plugin: 'com.banzhi.myplugin' properties文件内容为:

//MyPlugin文件的全路径
implementation-class=com.banzhi.myplugin.PluginDemo

最终的目录结构为:

### 上传到maven

在model的build.gradle文件中添加:


group='com.banzhi.myplugin'
version='1.0.0'
uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri('D:/repo'))
        }
    }
}

同步下代码,然后上传:

等待执行完成后会在maven仓库中生成repo文件:

其中,repo是仓库名称,com.banzhi.myplugin是指定的group,myplugin是模块名称,1.0.0是指定的版本号version;

### 使用

在app的build.gradle中添加:

buildscript {
    repositories {
        maven {
             url uri('D:/repo')
        }
    }
    dependencies {
       classpath 'com.banzhi.myplugin:myplugin:1.0.0'
    }
}


apply plugin: 'com.banzhi.myplugin'

同步代码后在Terminal中执行 gradlew testTask,最终运行结果为:

### 另一种方式

另一种方式是针对当前项目的Gradle插件,不需上传到maven仓库,相对来说比较简单,不需要创建sources文件;

1.创建的module名称必须是buildsrc;

2.build.gradle中不需要上传maven的代码,代码为:

apply plugin: 'groovy'

dependencies {
    compile gradleApi()
    compile localGroovy()
}

repositories {
    jcenter()
}

最终的文件结构为:

PluginSecond.groovy的代码:

package com.banzhi.myplugin

import org.gradle.api.Plugin
import org.gradle.api.Project

public class PluginDemo implements Plugin<Project> {

    @Override
    void apply(Project project) {
        project.task("testTask") << {
            println("========================")
            println("hello gradle plugin!")
            println("========================")
        }

    }

}

在app的build.gradle中添加 

apply plugin: com.banzhi.buildsrc.PluginSecond

注意这里的引用不要加引号!rebuild代码,运行测试:

猜你喜欢

转载自blog.csdn.net/jy494495991/article/details/83060316