自定义Gradle插件

2018-01-18  本文已影响0人  我叫王菜鸟

用idea新建一个工程


image.png

新建3个groovy文件


image.png

内容分别是

这个类是插件的核心,文档中定义到


image.png
image.png

意思就是:Plugin代表了一个功能的拓展。一个插件将一些配置应用到一个目标对象上。通常,这个目标对象是一个项目,但是插件可以应用于任何类型的对象。
其中apply方法就是将该插件应用到指定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) {
        //配置过后可以在目标project中通过pluginsrc进行一些配置
        project.extensions.create('pluginsrc', MyExtension)
        //创建一个自定义的任务
        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目录进行配置


image.png

其中pluginsrc.properties前面的pluginsrc可以换成其他合法名字,这个名称的目的就是在目标工程中引用比如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'//不注释这句,就会报错
    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目录
路径是当前工程的上一级的上一级目录,这样就生成了对应的repo

引用插件
建立一个工程


对应的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'
}

当引用成功后会有一个我们自定义的task


image.png

运行就可以看到结果了

image.png
上一篇 下一篇

猜你喜欢

热点阅读