Bootstrap

Gradle之任务(二)

版本

  1. gradle-4.8.1

GroovyDSL

  1. 属性访问器的自动转换

    {
         
        project.buildDir
        等价于:
        getProject().getBuildDir()
    
        project.group = "dianping.beauty"
        等价于:
        project.setGroup("dianping.beauty")
    }
    
  2. 方法调用,括号可选

    {
         
        project.setProperty("buildDir","/data")
        project.setProperty "buildDir","/data"
    }
    

任务

  1. 每个gradle构建都包含三个基本块project、task、property。每个构建包含至少一个project,进而包含一个或多个task。project和task的暴露的属性可以用来控制构建。

  2. 项目(Project):代表一个正在构建的组件(一个jar文件)或一个想要完成的目标,当构建启动时,gradle会根据build.gradle实例化一个org.gradle.api.Project类

  3. 任务动作(Task Action):定义了一个当任务执行时最小的工作单元。动作就是在task中合适的地方放置构建逻辑。Task接口提供了两个相关的方法来声明task动作:doFirst(Closure)和doLast(Closure)。当task被执行的时候,动作逻辑被定义为闭包参数被依次执行。

  4. 可以为每个task只添加一个动作或者多个动作。在内部,每个task都保持了一个动作列表,在运行时,它们按顺序执行。

    task printVersion{
         
      group="verion"
      description="打印版本号"
      doFirst {
          println "2.0" }
    
    }
    
    // –q 表示日志级别为error
    $ gradle –q printVersion
    2.0
    
  5. 一个构建至少包含一个项目、一个项目可包含多个任务,项目与项目,项目中任务与任务都可以建立依赖关系。

    img

  6. 任务名字的缩写:能够以驼峰式的缩写在命令行上执行任务。不如helloWorld任务,可以通过gradle hW(当你的任务名字比较长的时候可以使用缩写,但是必须保证缩写的名字唯一)

    task helloWorld(){
         
        println "HelloWorld"
    }
    
    $ gradle -q hW
    HelloWorld
    
    
  7. 排除任务可以使用-x选项

    // 这里排除了tH任务
    $ gradle -q third -x tH  
    
  8. 根据表达式跳过任务,调用task对应的onlyIf()方法,跳过task

    1. 语法,onlyif方法接收一个闭包作为参数,如果该闭包返回true则该任务执行,否则跳过
    taskname.onlyIf{
         expression == true}
    
    2. 案例
    
    

创建任务

  1. 第一种方式,本质是调用Project对象中的task(String name)方法

    def Task task = task(helloWorld1)
    helloWorld1.doLast{
         
        println "helloWorld1"
    }
    
  2. 第二种方式,name+Map(配置)

    //任务的分组就是对任务的分类
    def Task task2 = task(helloWorld2,group: BasePlugin.BUILD_GROUP)
    helloWorld2.doLast{
         
        println "helloWorld2"
    }
    

    image-20190918132451603

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;