Gradle Task

Gradle里的task用来描述构建中不可分割的原子任务,例如编译,打包JAR,生存javadoc等,都是task。

定义Task

定义Task
1
2
3
4
5
task hello {
     doLast {
          println "Hello World!"
       }
  }
简单定义Task
1
2
3
4
5
task upper << {
      String someString = 'mY_nAmE'
      println "Original: " + someString 
      println "Upper case: " + someString.toUpperCase()
  }

注意:

  • 这里直接使用“<<”来定义Task,“<<”是doLast的别名
  • 定义Task的时候就是写代码,这里先定义了一个变量,然后调用toUpperCase方法
另外一个Task
1
2
3
task count << {
      4.times { print "$it " }
  }

运行Task

1
2
gradle -q hello
Hello World!

其中:

  • -q是gradle的命令行参数,用于阻止gradle的log输出,这样就只输出gradle脚本里输出的内容。
  • Hello World!是我们定义的task的输出。

Task依赖

Task依赖
1
2
3
4
5
6
task hello << {
      println 'Hello world!'
  }
  task intro(dependsOn: hello) << {
      println "I'm Gradle"
  }
  • 使用dependsOn来定义当前task依赖的task
  • 依赖的Task可以在当前的Task之后定义

动态Task

Task依赖
1
2
3
4
5
6
4.times { counter ->
      task "task$counter" << {
          println "I'm task number $counter"
      }
  }
  task0.dependsOn task2, task3
  • 使用counter作为变量,在定义task的时候使用“task$counter”会动态定义出task0,task1,task2,task3
  • task0.dependsOn task2, task3通过调用task0的dependsOn的方法,也可以定义Task的依赖

Task的API

Task API
1
2
3
4
5
6
7
8
9
10
11
12
task hello << {
      println 'Hello Earth'
  }
  hello.doFirst {
          println 'Hello Venus'
  }
  hello.doLast {
      println 'Hello Mars'
  }
  hello << {
      println 'Hello Jupiter'
  }
  • doFirst和doLast可以被执行多次
  • 定义完task之后,就可以调用doLast,doFirst和<<

Task的属性

Task API
1
2
3
4
5
6
task myTask {
      ext.myProperty = "myValue"
  }
  task printTaskProperties << {
      println myTask.myProperty
  }
  • 在定义Task的时候,使用ext.myProperty为Task添加属性
  • 在别的Task里,直接使用myTask.myProperty来访问Task的属性

定义函数

Task API
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
task checksum << {
      fileList('../antLoadfileResources').each {File file ->
          ant.checksum(file: file, property: "cs_$file.name")
          println "$file.name Checksum: ${ant.properties["cs_$file.name"]}"
      }
  }
  task loadfile << {
      fileList('../antLoadfileResources').each {File file ->
          ant.loadfile(srcFile: file, property: file.name)
          println "I'm fond of $file.name"
      }
  }
  File[] fileList(String dir) {
      file(dir).listFiles({file -> file.isFile() } as         FileFilter).sort()
  }
  • 在后面定义了fileList函数
  • 在定义Task的时候,调用fileList函数

默认Task

Task API
1
2
3
4
5
6
7
8
9
10
defaultTasks 'clean', 'run'
  task clean << {
      println 'Default Cleaning!'
  }
  task run << {
      println 'Default Running!'
  }
  task other << {
      println "I'm not a default task!"
  }
  • 使用defaultTasks ‘clean’, ‘run’定义哪些task是默认的
  • 可以定义多个默认的Task
Comments

Comments