来个小栗子
/**构建脚本中默认是有一个project实例的,脚本中所有代码的默认作用域都是project**/
/**apply是project的一个方法,省略括号,plugin是其参数,值为'java';version是project的一个属性**/
/**repositories依然是project的一个方法,以闭包作为参数,闭包中调用mavenCentral()方法,dependencies也是如此**/
apply plugin 'java'
/**用以打包web工程的插件**/
apply plugin 'war'
version='0.1'
repositories {
mavenCentral()
}
dependencies {
compile 'commons-codec:commons-codec:1.6'
}
构建脚本概要
Gradle构建中有两个基本概念:project以及task。一个构建中至少包含一个项目,一个项目中可以有多个任务。在多项目构建中,一个项目可以依赖于其它的项目,并且形成一个依赖关系图,以保证它们按照需要的顺序执行。
项目
一个项目(project)代表一个正在构建的组件(比如一个jar或者一个war),当构建启动之后,Gradle会基于build.gradle实例化一个org.gradle.api.Project类,并且能够通过project变量使其隐式可用,即在构建脚本build.gradle中,方法、变量的调用都是在project上。
project有这样几个属性:group、name、version。我们可以将这三个属性认为是一个project的标识,通过这三个属性可以唯一确定一个组件(jar)。
project的方法:apply、dependencies、repositories、task。看着理解就行了,如果使用过maven的话,是很简单的。apply可以指定应用哪些插件,dependencies指定需要依赖的组件,repositories指定仓库,task指定项目有哪些任务。
属性可以用这样两种方式配置:ext、gradle.properties中指定键值对。
Task
对应org.gradle.api.Task。主要包括任务动作和任务依赖。任务动作指定最小的工作单元,可以定义任务依赖于其他任务或者动作顺序、执行条件。
Task的方法:
- dependsOn:声明任务依赖。
- doFirst doLast<<:task是一个动作列表,doFirst表示在列表的最前端添加一个动作,doLast表示在列表的末尾添加。
再次解析
/**此处group相当于
project.group='cn.incorp'
也就是所谓的隐式调用了project.setGroup()方法
**/
group 'cn.incorp'
version '1.0-SNAPSHOT'
/**我们当然是可以自定义任务,
但在使用插件时,其自带了一些任务
例如war插件会带有'war'任务
java插件中带有:compileJava、processResources、classes、jar任务,jar依赖于前三个任务,因而执行jar会先执行前三者
**/
apply plugin: 'java'
apply plugin: 'war'
sourceCompatibility = 1.8
repositories {
// mavenCentral()
jcenter()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.6'
}
自定义任务
/**创建闭包**/
def createDir={
path ->
File file=new File(path);
if(!file.exsits){
dir.mkdirs();
}
}
task makeDir(){
def paths=['src/main/java','src/main/resources','src/test/java','src/test/resources'];
/**创建动作**/
doFirst{
paths.forEach(createDir);
}
}