1.构建脚本基础
Posted Young_xiaoT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 在一个多项目构建中,每一个子项目都可以有它特有的默认任务。如果一个子项目没有特别的默认任务,父项目的默认任务将会被执行。
以上是关于1.构建脚本基础的主要内容,如果未能解决你的问题,请参考以下文章