gradle

每个build.gradle文件都和一个Project对象一一对应。

build.gradle中的脚本都会委托给Project对象执行,所以脚本中可以调用project的方法和访问他的属性;

当通过gradle进行构建时,实际执行的是Project对象中的某个task

生命周期:

  • 初始化 setting.gradle中的脚本会执行,gradle根据其中的配置创建哪些Project对象
  • 配置阶段:顶层的build.gradle会先执行,之后根据setting.gradle中的配置顺序执行各个子module中的build.gradle脚本
  • 执行任务:执行某个task,若该task依赖了其他task,会先执行其依赖的task

调用Project对象的task方法创建task

//groovy在调用函数时可以省略括号
task helloJava {
    //doLast中的语句会在task执行完之后执行
    doLast {
        println "hello java"
    }
    println "configure task ${name}"
}
afterEvaluate{
	//配置阶段完成后...
}
//监听所有task的执行,输出所有//监听所有task的执行,输出所有task的执行顺序
gradle.taskGraph.beforeTask{
	println "start task : ${it.name}"
}

2.3 Gradle DSL

build.gradle中的脚本是groovy语言写的,其中的一些语句实际是函数调用

task(dependsOn:helloJava, showLifeCycle, {Task task(dependsOn:helloJava, showLifeCycle, {Task task->
	task.doLast({
		println "hello groovy"
	})
	println "configure task ${task.name}"
})
  • 第一个参数是map
  • 第二个参数是task的name
  • 第三个参数是一个闭包,闭包中的参数为该task本身。在闭包中又调用了task的doLast方法,该方法参数也是一个闭包,该闭包会转化成一个action加入到task的action list的最后一个位置。task在执行时按顺序执行action list

build.gradle脚本中的函数调用和属性访问都会委托给Project对象,build.gradle中的buildScript、allProjects、task、apply等都是调用Project对象的响应方法,这些api的集合成为Gradle的DSL. DSL中最常用的Project和Task对象

2.3.1 Project

2.3.2 Task

https://dongchuan.gitbooks.io/gradle-user-guide-/content/more_about_tasks/defining_tasks.html

例子 15.10. 通过定义一个任务

build.gradle

task copy(type: Copy) {
   from 'resources'
   into 'target'
   include('**/*.txt', '**/*.xml', '**/*.properties')
}

请不要忘了构建的各个阶段.

一个任务有配置和动作. 当使用 << 时, 你只是简单的使用捷径定义了动作. 定义在配置区域的代码只会在构建的配置阶段执行, 而且不论执行哪个任务. 可以参考第 55 章, The Build Lifecycle for more details about the build lifecycle.

查询依赖


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!