1.构建脚本基础

转载整理自Gradle User Guide 中文版

构建脚本基础

1. project 和 tasks

Gradle里的任何东西都是基于这两个概念:
  • projects(项目)
  • tasks(任务)

每一个构建都是由一个或多个projects构成的。一个project代表什么依赖于你想用Gradle做什么,一个project可以代表一个JAR、一个网页应用或者一个ZIP压缩包。这个ZIP可能是由许多其他项目JARs构成的。但是一个project不一定非要代表被构建的某个东西,它可以代表一件想要做的事,比如部署应用。

每一个project 是由一个或多个tasks构成的。一个tasks代表一些更加细化的构建,可能是编译一些classes,创建一个JAR,生成javadoc,或者是生成某个目录的压缩文件。

2. Hello World

可以通过gradle命令运行一个Gradle构建。

gradle命令会在当前目录查找一个叫build.gradle的文件,我们称这个build.gradle文件为一个构建脚本(build script),但严格来说它是一个构建配置脚本(build configuration scrip)。这个脚本定义了一个project和它的tasks。


创建一个名为build.gradle的构建脚本

build.gradle

task hello {
  doLast{
    println 'hello world!'
  }
}

输入 gradle -q hello 来执行构建脚本:

gradle -q hello 的输出

> gradle -q hello
 hello world!

这个构建脚本定义了一个独立的tasks,叫做hello,并且加入了一个action,当运行gradle hello,Gradle执行叫hello的task,也就是执行了提供的action。这个action是一个包含了一些Groovy代码的闭包(closure)

-q 代表quite模式 ,它不会生成Gradle的日志信息(log messages),只能看到tasks的输出。

3. 快捷的任务定义

build.gradle

task hello2 << {
  println 'Hello World!'
}

与前面的例子比较,doLast被替换成了 << ,他们有一样的功能,但看上去更加简洁了。

4. 构建脚本代码

eg:
build.gradle

task upper << {
    String someString = 'mY_nAmE'
    println "Original: " + someString
    println "Upper case: " + someString.toUpperCase()
}

gradle -q upper 的输出

> gradle -q upper
Original: mY_nAmE
Upper case: MY_NAME

5. 任务依赖

声明任务之间的依赖关系

build.gradle

task hello << {
    println 'Hello World!'
}

task intro(dependsOn: hello) << {
    println "I'm Gradle"
}
> gradle -q intro
Hello world!
I'm Gradle

intro依赖于hello,所以执行intro的时候hello命令会被优先执行来作为启动intro任务的条件。在加入一个依赖之前,这个依赖的任务不需要提前定义。

build.gradle

task taskX(dependsOn: 'taskY') << {
    println 'taskX'
}
task taskY << {
    println 'taskY'
}
> gradle -q taskX
taskY
taskX

taskX到taskY的依赖在taskY被定义之前就已经声明了,这对于多任务构建非常重要。

6. 动态任务

Groovy不仅被用来定义一个任务可以什么,还可以使用它来动态的创建任务。

build.gradle

4.times{ counter ->
    task "task$counter" << {
        println "I'm task unmber $counter"
    }
}

这里动态的创建了task0,task1,task2,task3

> gradle -q task1
I'm task number 1

7. 使用已经存在的任务

当任务创建之后,可以通过API来访问,可以创建额外的依赖。

通过API访问一个任务 - 加入一个依赖

build.gradle

4.times { counter ->
    task "task$counter" << {
        println "I'm task number $counter"
    }
}

task0.dependsOn task2, task3

gradle -q task0 命令输出

> gradle -q task0
I'm task number 2
I'm task number 3
I'm task number 0

或者给一个已经存在的任务加入行为
通过API访问一个任务 - 加入一个行为

build.gradle

task hello << {
    println 'Hello Earth'
}

hello.doFirst {
    println 'Hello Venus'
}

hello.doLast {
    println 'Hello Mars'
}

hello << {
    println 'Hello Jupiter'
}

gradle -q hello 命令输出

> gradle -q hello
Hello Venus
Hello Earth
Hello Mars
Hello Jupiter

doFirst 和 doLast 可以被执行许多次。他们分别可以在任务动作列表的开始和结束加入动作。当任务执行的时候,在动作列表里的动作将被顺序执行。第四个行为中 << 操作符是 doLast 的简单别称。

8. 短标记法

有一个短标记 $ 可以访问一个存在的任务,也就是说每个任务都可以作为构建脚本的属性:

build.gradle

task hello << {
    println 'Hello world'
}

hello.doLast {
  println "Greetings from the $hello.name task."
}

gradle -q hello 命令输出

> gradle -q hello
Hello world!
Greetings from the hello task.

这里的name是任务的默认属性,代表当前任务的名称,这里是hello.
这使得代码易于读取,特别是当使用了由插件(如编译)提供的任务时尤其如此。

9. 自定义任务属性

可以给任务加入自定义的属性,例如加入一个叫做myProperty属性,设置一个初始值给ext.myProperty。然后,该属性就可以像一个预定义的任务属性那样被读取和设置了。

build.gradle

task myTask {
    ext.myProperty = "myValue"
}

task printTaskProperties << {
    println myTask.myProperty
}

gradle -q printTaskProperties 命令输出

> gradle -q printTaskProperties
myValue

给任务加自定义属性是没有任何限制的。

11. 默认任务

Gradle 允许在脚本中定义一个或多个默认任务

build.gradle

defaultTasks 'clean', 'run'

task clean << {
    println 'Default Cleaning!'
}

task run << {
    println 'Default Running!'
}

task other << {
    println "I'm not a default task!"
}

gradle -q 命令输出

> gradle -q
Default Cleaning!
Default Running!

等价于 gradle -q clean run 在一个多项目构建中,每一个子项目都可以有它特有的默认任务。如果一个子项目没有特别的默认任务,父项目的默认任务将会被执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值