Gradle学习(一)
安装
Gradle需要jdk1.5以上的安装环境,Gradle装配了自己的Groovy库,所以无需安装Groovy,配置GRADLE_HOME以及PATH
gradle -v 测试安装成功与否
Project与Task
每一个Gradle的配置都是由一个或多个Project组成,Project的含义取决于你用Gradle来做什么,一个Project可能代表一个Jar library 或者一个web应用或者一个zip压缩包,一个Project并不一定代表一个即将被构建的项目,
也可能代表一个已经被构建好的项目。
每一个Project由一个或多个Task组成,一个Task代表一些原子性的构建工作,可能是编译代码,打jar包,生成java文档,或者发布一些归档信息到一个repository。
Hello World
用命令行运行Gradle构建的时候,会在当前目录下寻找一个名为build.gradle的文件
在这个build script里定义了一个名为hello的task,当你运行gradle hello命令时gradle就会执行hello这个task里面的内容,这样定义的方式与Ant中target十分相似,Gradle中的task可以等价于Ant中的target
task hello { doLast{ println "Hello World!" } }
运行gradle -q hello 得到如下结果(-q选型时关闭gradle日志信息,直接使用gradle hello也可以得到相同的结果,但会打印出一些Gradle的日志)
一种更简洁的hello task定义方式,输出结果与上述方式结果一致
task hello << { println 'Hello World' }
Task依赖
task hello << { println 'Hello World' } task intro(dependsOn: hello) << { println "I'm Gradle" }
依赖与被依赖task的定义顺序可以颠倒
task taskX(dependsOn: 'taskY') << { println "taskX" } task taskY << { println "taskY" }
动态Task
4.times { counter -> task "task$counter" <<{ println "I'm task number $counter" } }
操作已经存在的Task
一旦一个task被创建了那么他们就可以被API访问,这一点与Ant不同
4.times { counter -> task "task$counter" <<{ println "I'm task number $counter" } } task0.dependsOn task2, task3
task hello << { println 'Hello Earth' } hello.doFirst { println "Hello Venus" } hello.doLast { println "Hello Mars" } hello << { println "Hello Jupiter" }
doFirst和doLast可以被定义并执行多次(定义同样的操作类型则按照定义的顺序执行) hello << 等价于hello.doLast
额外的Task配置
你可以通过ext.设置task的额外属性
task myTask { ext.myProperty = "myValue" } task printTaskProperties <<{ println myTask.myProperty }
定义默认任务
defaultTasks 'clean', 'run' task clean << { println "Default Cleaning!" } task run << { println "Default Running!" }
相当于执行gradle clean run 命令
在多工程构建中每一个子项目都可以拥有其默认的任务,如果一个子项目没有指定其默认的任务,那么就会执行其父项目的默认任务(如果父项目中定义的话)
gradle有配置阶段以及执行阶段,在配置阶段之后Gradle会知道将要被执行的所有任务,Gradle给你提供一个“钩子”来让你使用这些信息
下面这个例子阐述了release task是不是被执行的task之一,根据结果你可以分配不同的值给不同的变量
task distribution << { println "We build the zip with version=$version" } task release(dependsOn: 'distribution') <<{ println "We release now" } gradle.taskGraph.whenReady { taskGraph -> if(taskGraph.hasTask(release)) { version = "1.0" } else { version = "1.0-SNAPSHOT" } }
当release task被执行的时候version = "1.0" 没被执行的时候 version = "1.0-SNAPSHOT"