【Gradle】Gradle插件

个人博客:
http://www.milovetingting.cn

Gradle插件

插件的作用

把插件应用到项目中,插件会扩展项目的功能,帮助在项目构建过程中做很多事情。

1、可以添加任务到项目中,帮助完成测试、编译、打包等。

2、可以添加依赖配置到项目中,可以通过它们配置项目在构建过程中需要的依赖,如编译时依赖的第三方库等。

3、可以向项目中现有的对象类型添加新的扩展属性、方法等。

4、可以对项目进行一些约定,如应用Java插件后,约定src/main/java目录是我们的源代码存在位置,在编译的时候也是编译这个目录下的Java源代码文件。

如何应用一个插件

插件的应用都是通过Project.apply()方法完成的。

应用二进制插件

二进制插件就是实现了org.gradle.api.Plugin接口的插件,它们可以有Plugin id。

apply plugin:'java'

上面的语句,其中'java'就是Java插件的plugin id,它是唯一的。其实它对应的类型是org.gradle.api.plugins.JavaPlugin,所以通过该类型,我们也可以应用这个插件:

apply plugin:org.gradle.api.plugins.JavaPlugin

又因为包org.gradle.api.plugins是默认导入的,所以可以去掉包名直接写成:

apply plugin:JavaPlugin

应用脚本插件

build.gradle

apply from:'version.gradle'
task task1{
    println "版本是:${versionName},版本号是:${versionCode}"
}

version.gradle

ext{
    versionName = '1.0'
    versionCode = 1
}

apply方法的其他用法

Project.apply()方法有三种使用方法:

void apply(Map<String,?> options);
void apply(Closure closure);
void apply(Action<? super ObjectConfigurationAction> action);

闭包的方式如下:

apply{
    plugin 'java'
}

Action方式:

apply (new Action<ObjectConfigurationAction>){
    @Override
    void execute(ObjectConfigurationAction objectConfigurationAction){
        objectConfigurationAction.plugin('java')
    }
}

应用第三方发布的插件

第三方发布的jar的二进制插件,我们在应用的时候,必须要先在buildscript{}里配置其classpath才能使用。

buildscript{
    repositories{
        jcenter()
    }
    dependencies{
        classpath 'com.android.tools.build:gradle:1.5.0'
    }
}

buildscript{}是一个构建项目前,为项目进行前期准备和初始化相关配置依赖的地方,配置好所需的依赖,就可以应用插件了

apply plugin:'com.android.application'

使用plugins DSL应用插件

plugins{
    id 'java'
}

更多好用的插件

可以在https://plugins.gradle.org/ 上找到,也可以在github上找。

自定义插件

自定义插件必须实现Plugin接口,这个接口只有一个apply方法,该方法在插件被应用的时候执行。

定义在build脚本文件里:

apply plugin:CustomPlugin

class CustomPlugin implements Plugin<Project>{
    void apply(Project project){
        project.task('customTask').doLast{
            println '这是一个通过自定义插件方式创建的任务。'
        }
    }
}

这种只能在自己项目里用,如果想开发一个独立的插件给所有想用的人,则需要创建单独工程来开发自定义插件了。

新建一个Android Module

清空Module的build.gradle内容,添加以下内容,配置开发所需的依赖:

apply plugin: 'groovy'

dependencies {
    implementation gradleApi()
    implementation localGroovy()
}

然后实现依赖类:

删除src/main目录下的所有文件,新建一个groovy文件夹,在这个文件夹新建包,如com.wangyz.plugins,然后在这个文件夹下,新建一个类,如:CustomPlugin.groovy,内容如下:

package com.wangyz.plugins

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

class CustomPlugin implements Plugin<Project> {

    @Override
    void apply(Project project) {
        project.task('CustomTask').doLast {
            println("这是一个通过自定义插件方式创建的任务")
        }
    }
}

在src/main文件夹下新建resources文件夹,然后在这个文件夹中新建META-INF文件夹,然后在这个文件夹下新建gradle-plugins文件夹,然后新建com.wangyz.plugins.customplugin.properties文件,文件名就是其它应用依赖的名。内容如下:

implementation-class=com.wangyz.plugins.CustomPlugin

写好后,我们配置发布:

在Module的build.gradle文件中,添加以下内容:

apply plugin: 'maven-publish'

publishing {
    publications {
        mavenJava(MavenPublication) {

            groupId 'com.wangyz.plugins'
            artifactId 'customplugin'
            version '1.0.0'

            from components.java

        }
    }
}

publishing {
    repositories {
        maven {
            // change to point to your repo, e.g. http://my.org/repo
            url uri('/home/wangyz/repos')
        }
    }
}

然后在控制台,输入以下指令:

./gradlew publish

发布成功后,配置引用:

在需要引入依赖的工程根目录下的build.gradle添加以下内容:

buildscript {
    repositories {
        maven {
            //local maven repo path
            url uri('/home/wangyz/repos')
        }
        
    }
    dependencies {
        //这里配置为发布时填写的:groupId:artifactId:version
        classpath 'com.wangyz.plugins:customplugin:1.0.0'
    }
}

在App的build.gradle下添加以下内容:

//这里的配置为:
apply plugin: 'com.wangyz.plugins.customplugin'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容

  • 在 Android Studio 构建的项目中,基于 Gradle 进行项目的构建,同时使用 Android DS...
    Ant_way阅读 7,344评论 0 16
  • 参考资料 Groovy groovy官网 写出gradle风格的groovy代码 Groovy教程 Gradle ...
    WangGavin阅读 3,059评论 1 2
  • 参考链接(支持作者原创,我摘抄了关键点,以防地址失效) Android Studio 更新后,项目中,对应的gra...
    二愣子传奇阅读 5,373评论 0 2
  • 1.介绍 如果你正在查阅build.gradle文件的所有可选项,请点击这里进行查阅:DSL参考 1.1新构建系统...
    Chuckiefan阅读 12,129评论 8 72
  • 6月10日,凹凸曼两个月啦~ 自从宝宝不拉稀没黄疸之后,体重蹭蹭地往上涨,很快就变成一个小胖子了~哈哈,两个月已经...
    loftcat阅读 228评论 0 1