• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Gradle连载1闭包

android 搞代码 3年前 (2022-04-16) 33次浏览 已收录 0个评论
文章目录[隐藏]

一、闭包委托

  • 闭包有thisObject、owner、delegate三个属性,在闭包内调用办法的时候,由他们来确定应用哪个对象呢来进行解决。默认状况下delegate和owner是相等的,过后delegate是能够被批改的,这个性能是十分弱小的,Gradle中的闭包很多性能都是通过批改delegate进行实现的。

    <code class="groovy">task helloDelegate {
      new Delegate().test {
          println "thisObject:${thisObject.getClass()}"
          println "owner:${owner.getClass()}"
          println "delegate:${delegate.getClass()}"
          println "================"
          method1()
          println "================"
          it.method1()
      }
    }
    
    def method1() {
      println "Context this:${this.getClass() } int root"
      println "method1 in Delegate"
    }
    
    class Delegate {
      def method1() {
          println "Delegate this:${this.getClass() } int Delegate"
          println "method1 in Delegate"
      }
    
      def test(Closure<Delegate> closure) {
          closure(this)
      }
    }
<code class="groovy">task configClosure {
    person {
        personName = "张三"
        personAge = 20
        dumpPerson()
    }
}

class Person {
    String personName
    int personAge

    def dumpPerson() {
        println "name is ${personName}, age is ${personAge}"
    }
}

def person(Closure<Person> closure) {
    Person p = new Person();
    closure.delegate = p
    // 委托模式优先
    closure.setResolveStrategy(Closure.DELEGATE_FIRST);
    closure(p)
}

二、task,doFirst,doLast

<code class="gradle">task customTask1 {
    doFirst {
        println 'customTask1:doFirst'
    }
    doLast {
        println 'customTask1:doLast'
    }
}

tasks.create("customTask2") {
    doFirst {
        println 'customTask2:doFirst'
    }
    doLast {
        println 'customTask2:doLast'
    }
}
  • 这两种形式都是能够的,task是Project对象的一个函数,原型为create(String name, Closure configureClosure)
  • customTask1为工作的名字,咱们能够自定义;第二个参数是一个闭包,也就是咱们花括号外面的代码块,依据咱们讲的Groovy的只是,最初一个参数是闭包的时候,也能够放到括号里面,而后办法的括号是能够进行省略的,就能够生成了咱们下面的写法,很简洁。该闭包作用就是用来对咱们创立的工作进行配置,例子中咱们用了工作的doFirst和doLast办法,别离在工作执行前后输入了一段文字,除此之外还有其余办法,属性等。

    三、工作依赖

    <code class="groovy">task ex35Hello {
      println 'hello'
    }
    
    task ex35Main(dependsOn: ex35Hello) {
      doLast {
          println 'main'
      }
    }
    
  • 从下面能够看进去工作ex35Main是依赖第一个工作,咱们在这外面写入了dependsOn关键字,进行增加前置工作,上面来看一下,减少一下多个工作

    <code class="groovy">task ex35Hello {
      println 'hello'
    }
    
    task ex35Main(dependsOn: ex35Hello) {
      doLast {
          println 'main'
      }
    }
    
    task ex35World {
      println 'world'
    }
    
    task ex35MultiTask {
      dependsOn ex35Hello, ex35World
      doLast {
          println 'multiTask'
      }
    }

    四、工作键通过API管制、交互

    <code class="groovy">task ex36Hello {
      println 'dowLast1'
    }
    
    ex36Hello.doFirst {
      println 'dowFirst'
    }
    
    ex35Hello.doLast {
      println project.hasProperty('ex36Hello') // 阐明每一个工作都是Project的一个属性
      println 'dowLast2'
    }
  • 在Project中每一个task都是一个属性,咱们从下面返回的断定后果中就可见一斑。

    五、自定义属性

    <code class="groovy">// 自定义一个Project的属性
    ext.age = 18
    
    // 通过代码块同时自定义多个属性
    ext {
      phone = 1334512
      address = ''
    }
    
    sourceSets.all {
      ext.resourcesDir = null
    }
    
    sourceSets {
      main {
          resourcesDir = "main/res"
      }
    
      test {
          resourcesDir = "test/res"
      }
    }
    
    task ex37CustomProperty {
      println "年龄是:${age}"
      println "电话是:${phone}"
      println "地址是:${address}"
    
      sourceSets.each {
          println "${it.name}的resourcesDir是:${it.resourcesDir}"
      }
    }
  • 自定义的属性都失效了,在我的项目中个别应用它来自定义版本号和版本名称,把版本号和版本名称独自放在一个Gradle文件中,因为他们每次公布版本的时候都会扭转,变动频繁,放到一个独自的Gradle文件中,便于管理,而且改变的时候不会因为Git抵触影响整个Build文件,便于解决抵触。

    六、脚本代码

    <code class="groovy">def buildTime() {
      def date = new Date()
      def formattedDate = date.format("yyyyMMdd")
      return formattedDate
    }
  • 在build.gradle文件中能够应用Java代码,Groovy代码和Gradle,灵便应用这些代码,能够使工程更能智能,多样化。

    七、源码

  • gitee门路:https://gitee.com/dongqianrui…
  • CSDN:https://www.gaodaima.com/weixin_…
  • 博客园:https://www.cnblogs.com/ruige…
  • 欢送关注微信公众号:傅里叶变换,集体账号,仅用于技术交换

本文由博客一文多发平台 OpenWrite 公布!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Gradle连载1闭包
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址