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

(1) 基本概率

    gradle中的一切都基于两个概念:projecttask

    每次gradle build都是组装一个或多个projectproject可能是一个library JAR,也可能是一个web应用,它还能是一个配置(不一定能被Build);

    每一个project由一个或多个task组成

 

(2) 基本操作

例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!'
}

 

(3) 使用Groovy语句

   

    在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 是被双引号包含。

 

(4) 任务的依赖(Task dependencies)
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,'
}

 

(5) 动态任务(Dynamic tasks)

例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) 额外的任务参数(Extra task properties)

例6

task myTask {
    ext.myProperty = "myValue"
}

task printTaskProperties << {
    println myTask.myProperty
}

输出:myValue

 

(7) 使用 Ant 任务

例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) 默认任务

例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) Configure by DAG

例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
posted @ 2015-11-17 15:37  学数学的程序猿  阅读(390)  评论(0编辑  收藏  举报