自定义Gradle Plugin和Groovy语法简单介绍

1.介绍:

官方介绍


image.png

翻译:Gradle插件将构建逻辑的可重用部分打包起来,这些逻辑可以跨许多不同的项目和构建使用。Gradle允许您实现自己的插件,这样您就可以重用您的构建逻辑,并与他人共享它。

2.Gradle Plugin本质

本质:就是把逻辑独立的代码抽取和封装

3.Plugin的最基本用法

 3.1我们在 build.gradle 里编写:
//plugin简单使用
apply plugin: PluginDemo

class PluginDemo implements Plugin<Project>{
    @Override
    void apply(Project target) {
            println "Hello"
        }
  }

通过控制台输入:gradlew
打印结果:

plugin_one.gif

 3.2.如何动态配置呢。像我们build.gradle文件中android{ ... }那样?

  使用:extension,他不是一个类。

//plugin简单使用
apply plugin: PluginDemo

class PluginDemo implements Plugin<Project>{
    @Override
    void apply(Project target) {
        def extension = new ExtensionDemo()
        println "Hello ${extension.name}"
    }
}

class ExtensionDemo{
    def name = "张三"
}

打印结果

plugin_two.gif

使用动态配置:

//plugin简单使用
apply plugin: PluginDemo

class PluginDemo implements Plugin<Project>{
    @Override
    void apply(Project target) {
        def extension = target.extensions.create("hencoder",ExtensionDemo)
        //稍后执行
        target.afterEvaluate {
            println "Hello ${extension.name}"
        }
    }
}

class ExtensionDemo{
    def name = "张三"
}

hencoder{
    name = "李四"
}

执行结果:


plugin_three.gif

4.自定义Plugin

步骤:

   1.在Project下创建一个文件,文件名为buildStr(名称必须是这个),或者创建一个javalibrary的model,注意需要在工程下的setting.gradle中去除新建的plugin
   2.在目录下边新建resources/META-INF/gradle-plugins/xxx.properties 注意后缀必须是.properties
      目录结构:

      resources
         META-INF
            gradle-plugins
              xxx.properties(xxx为插件的名称,最终需要在build.gradle中配置)

   3.在main下边创建一个类,需要为.groovy文件,实现Plugin<Project>,实现apply方法
   4.在xxx.properties文件添加 implementation-class=包名.第三步创建的类名
   5.通过上方最基本的使用,extension的用法
   6.在项目的build.gradle中添加我们的plugin。
例如:

image.png

执行结果:


plugin_four.gif

5.关于buildStr的目录

1.这是 gradle 的⼀个特殊⽬录,这个⽬录的 build.gradle 会⾃动被执⾏,即使不配配置进settings.gradle
2.buildSrc 的执⾏早于任何⼀个 project,也早于 settings.gradle。它是⼀个独⽴的存在
3.buildSrc 所配置出来的 Plugin 会被⾃动添加到编译过程中的每⼀个 project 的 classpath,因此它们才可以
  直接使⽤ apply plugin: 'xxx' 的⽅式来便捷应⽤这些 plugin
4.settings.gradle 中如果配置了 ':buildSrc' ,buildSrc ⽬录就会被当做是⼦ Project ,

因此会被执⾏两遍。所以在 settings.gradle ⾥⾯应该删掉 ':buildSrc' 的配置

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

推荐阅读更多精彩内容