gradle学习笔记(1)
1. 安装
(1) 下载最新gradle压缩包,解压到某处。地址是:Gradle web site;
(2) 添加环境变量:
1) 变量名:GRADLE_HOME
变量值:刚才解压的地址,如:E:\gradle-2.8。
2) 为Path变量添加一个值:GRADLE_HOME/bin
3) 测试。在命令行里输入gradle -v,若显示一些gradle信息,说明安装成功。
2. Hello World
gradle中的一切都基于两个概念:project和task;
每次gradle build都是组装一个或多个project。project可能是一个library JAR,也可能是一个web应用,它还能是一个配置(不一定能被Build);
每一个project由一个或多个task组成
例1:
build.gradle
task hello { doLast { println 'Hello world!' } }
现在你能在命令行中进入该文件所在目录,然后输入命令gradle -q hello 去执行hello任务,你将会在命令行中看到Hello World!。
它的执行过程是当你执行gradle命令时,gradle会在当前目录下寻找build.gradle文件。
build.gradle也被称为build script。另外,命令中-q的意思是不要输出gradle的一些日志信息。
还有一种更简便的task的写法:
task hello << { println 'Hello world!' }
在build脚本中还可以使用Groovy语句。
例2:
task upper << { String someString = 'mY_nAmE' println "Original: " + someString println "Upper case: " + someString.toUpperCase() }
同样,执行命令gradle -q upper,将输出:Original:hElLo wOrLd !(换行)Upper case:HELLO WORLD !
例3:
task count << { 4.times { print "$it " } }
输出:0 1 2 3。注意:$it 是被双引号包含。
task hello << { print 'Hello world,' } task intro(dependsOn: hello) << { print "I'm Gradle!" }
输出:Hello world,I'm Gradle!
另外,若想实现Lazy dependsOn(懒依赖),即把依赖任务写到被依赖任务的前面,例如上面想要将intro任务写到hello任务的前面,需要将intro任务中的dependsOn: hello中的hello打上单引号,否则会报Could not find property 'hello' on root project 'test'.错误,即:
task intro(dependsOn: 'hello') << { println "I'm Gradle!" } task hello << { print 'Hello world,' }
例4:
4.times { counter -> task "task$counter" << { println "I'm task number $counter" } }
task0.dependsOn task2, task3
执行命令gradle -q task0,输出:
I'm task number 2 I'm task number 3 I'm task number 0
为一个存在的任务添加行为,如下:
例5:
task hello << { println 'Hello Earth' } hello.doFirst { println 'Hello Venus' } hello.doLast { println 'Hello Mars' } hello << { println 'Hello Jupiter' }
输出:
Hello Venus
Hello Earth
Hello Mars
Hello Jupiter
例6:
task myTask { ext.myProperty = "myValue" } task printTaskProperties << { println myTask.myProperty }
输出:myValue
例7:
task loadfile << { def files = file('你要遍历的路径,可以是相对路径,也可以是绝对路径(注意路径中的斜杠,要么写一个正斜杠,要么写两个反斜杠)').listFiles().sort() files.each { File file -> if (file.isFile()) { ant.loadfile(srcFile: file, property: file.name) println " *** $file.name ***" println "${ant.properties[file.name]}" } } }
为了增强代码的灵活性与重用性,可以将一些代码抽取成一个方法,如:
例8:
defaultTasks 'clean', 'run' task clean << { println 'Default Cleaning!' } task run << { println 'Default Running!' } task other << { println "I'm not a default task!" }
输出:
Default Cleaning!
Default Running!
例9:
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' } }
执行gradle -q distribution
输出:We build the zip with version=1.0-SNAPSHOT
执行gradle -q release 输出:
We build the zip with version=1.0 We release now