• Home
  • About
    • wanziの遇笺 photo

      wanziの遇笺

      一点随笔,一丝感悟,一些记录,一种成长。

    • Learn More
    • Instagram
    • Github
  • Archive
  • Category
  • Tag

Gradle

29 Aug 2015

Reading time ~2 minutes

  每个Gradle build由一个或多个projects组成,一个project代表用gradle做了什么,比如可能代表了一个JAR库或者一个网页应用程序。
  一个project由一个或多个tasks组成,一个Task表示一个逻辑上较为独立的执行过程,比如编译Java源代码,拷贝文件,打包Jar文件,甚至可以是执行一个系统命令或者调用Ant。另外,一个Task可以读取和设置Project的Property以完成特定的操作。
  gradle命令在当前路径下寻找一个叫build.gradle的文件夹,也叫做build script,严格来说build configuration script,它定义了project和其tasks.

一、HelloWorld

1、调用Project的task()方法

在build.gradle中

task hello << {
    println 'Hello world!'
}

  其中<<表示向hello中加入执行代码。大括号之间的内容则表示传递给task()方法的一个闭包。

2、使用doLast加入执行过程

task hello {
    doLast {
        println 'Hello world!'
    }
}	

3、create方式

tasks.create(name: 'hello') << {
   println 'Hello world!'
}

4、运行,结果

  在terminal中输入 gradle -q hello   其中,-q作用是隐藏了日志信息,使其只显示tasks的输出,可以选择使用。

	$ gradle -q hello
	Hello world!

 

二、使用Grovvy

eg1:

build.gradle:

task upper << {
    String someString = 'mY_nAmE'
    println "Original: " + someString 
    println "Upper case: " + someString.toUpperCase()
}

Terminal:

$ gradle -q upper
Original: mY_nAmE
Upper case: MY_NAME

eg2:

build.gradle:

task count << {
    4.times { print "$it " }
}

Terminal:

$ gradle -q count
0 1 2 3 

三、task依赖

  taskA依赖于taskB,那么在执行taskA时,Gradle会先执行taskB,然后再执行taskA。

1、声明Task依赖关系的一种方式是在定义一个Task的时候:

build.gradle:

task taskX << {
    println 'taskY!'
}
task taskY(dependsOn: taskX){
    println "taskX!"
}

Terminal:

> gradle -q taskY
taskX
taskY

2、被依赖的Task还不存在的时候

在写depondsOn时候,对被依赖的task加上引号'task' build.gradle:

	task taskX(dependsOn: 'taskY') << {
	    println 'taskX'
	}
	task taskY << {
	    println 'taskY'	
	}

Terminal:

$ gradle -q taskX
taskY
taskX	

3、Example

gradle.build

task branch << {
    println "use version=$version"
}

task myTask(dependsOn: 'mybranch') << {
    println 'this is my task!'
}

gradle.taskGraph.whenReady {taskGraph ->
    if (taskGraph.hasTask(myTask)) {
        version = '1.0'
    } else {
        version = '2.0'
    }
}

Terminal:

$ gradle -q branch  
use version=2.0
$ gradle -q myTask
use version=1.0
this is my task!

四、动态task

build.gradle:

4.times { counter ->
    task "task$counter" << {
        println "I'm task number $counter"
    }
}

Terminal:

$ gradle -q task1
I'm task number 1

  注意,task是从0开始的,即此处存在task0、task1、task2、task3。可输入gradle tasks查看所有task。

五、操控现有task

1、添加依赖

build.gradle:

4.times { counter ->
    task "task$counter" << {
        println "I'm task number $counter"
    }
}
task0.dependsOn task2, task3

Terminal:

$ gradle -q task0
I'm task number 2
I'm task number 3
I'm task number 0

2、添加行为

build.gradle:

task hello << {
    println 'Hello world!'
}
hello.doFirst {
    println 'Hello first'
}
hello.doLast {
    println 'Hello last'
}
hello << {
    println 'Hello hello!'
}

Terminal:

$ gradle -q hello
Hello first
Hello world!
Hello last
Hello hello!

六、默认task

build.gradle:

defaultTasks 'clean', 'run'

task clean << {
    println 'Default Cleaning!'
}

task run << {
    println 'Default Running!'
}

task other << {
    println "I'm not a default task!"
}

Terminal:

$ gradle -q
Default Cleaning!
Default Running!


gradle Share Tweet +1