自己动手写一个插件

2015-12-06 ZhangTitanjum 更多博文 » 博客 » GitHub »

android 插件

原文链接 https://jungletian.github.io/2015/12/06/%E8%87%AA%E5%B7%B1%E5%8A%A8%E6%89%8B%E5%86%99%E4%B8%80%E4%B8%AA%E6%8F%92%E4%BB%B6/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


如何自己写一个 gradle 插件

看谷歌的插件:com.android.applicationcom.android.databinding

apply plugin: 'com.android.application'
apply plugin: 'com.android.databinding'

他们都是一个 groovy 项目,那么接下来让我们来看看如何自己手动写一个插件:

创建一个普通的 groovy 工程(java 工程也没有关系),创建 src/main/groovy 目录,编写下面的代码:

package com.example.wecar.plugin
import org.gradle.api.Plugin
import org.gradle.api.internal.project.ProjectInternal

class GreetingPlugin implements Plugin<ProjectInternal> {

    void apply(ProjectInternal project) {
        project.task('hello') << {
            println 'hello'
        }
    }
}

<!--more-->

在 src/main/resources 创建 META-INF/gradle-plugins 目录,创建 greetings.properties 文件:

implementation-class=com.example.wecar.plugin.GreetingPlugin

其中 greettings 就是你的插件 id。

build.gradle

group 'com.example.wecar.plugin'
version '1.1-SNAPSHOT'

buildscript {
    repositories {
        mavenLocal()
    }
}

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

repositories {
    mavenCentral()
}

sourceSets {
    main {
        groovy {
            srcDirs = [
                'src/main/groovy',
                'src/main/java'
            ]
        }  // compile everything in src/ with groovy
        java { srcDirs = []}// no source dirs for the java compiler

    }
}

dependencies {
    //tasks.withType(Compile) { options.encoding = "UTF-8" }
    compile gradleApi()
}

// custom tasks for creating source jars
task sourcesJar(type: Jar, dependsOn:classes) {
    classifier = 'sources'
    from sourceSets.main.allSource
}

// add source jar tasks as artifacts
artifacts { archives sourcesJar }

// upload to local
uploadArchives {
    repositories{
        mavenLocal()
    }
}

运行 uploadArchives 发布到本地仓库,那么就可以找到我们自己的插件了,由于当中没有指定 artifactId,那么我们的插件的 artifactId 就是我们的工程名称,比如这里是 deployplugin。

那么我们要怎么引入这个插件呢?

首先要再 buildScript 增加依赖:

buildscript {
    repositories {
        mavenLocal()
    }
    dependencies {
        classpath 'com.example.wecar.plugin:deployplugin:1.1-SNAPSHOT'
    }
}

然后:

apply plugin: 'greetings'

这样我们的 task “hello” 就被引入了。是不是很简单呢~