2 gradle 构建 和运行task
来源:互联网 发布:软件开发组织架构 编辑:程序博客网 时间:2024/05/21 17:55
1. 基本概念(Project 和 Task)
Gradle中有两个基本的概念:project和task。每个Gradle的构建由一个project构成,它代表着需要被构建的组件或者构建的整个项目。每个project由一个或者多个task组成。task代表着Gradle构建过程中可执行的最小单元。例如当构建一个组件时,可能需要先编译、打包、然后再生成文档或者发布等,这其中的每个步骤都可以定义成一个task。
2. 构建第一个Task
和Ant运行时读取build.xml类似,Gradle运行时默认会读取build.gradle这个文件, 当然你也可以使用参数"-b"来指定其他的xxx.gradle
下面,让我们新建一个build.gradle文件,然后输入如下内容:
task hello {
doLast{
println "hello world"
}
}
doLast{
println "hello world"
}
}
这个构建的脚本很简单,就是输出hello world。为了运行这个构建,我们应该在当前目录下执行 "gradle hello",即gradle TaskName。
doLast意思是定义一个行为(映射Gradle中的Action类),放在当前task的最后,类似的,还有doFirst, 表示将定义的行为放在当前task最前面,例如
task hello {
doLast{
println "Hello world"
}
doFirst{
println "I am xxx"
}
}
执行gradle hello, 将输出doLast{
println "Hello world"
}
doFirst{
println "I am xxx"
}
}
"I am xxx"
"Hello world"
另外,你也可以使用如下更简洁的方式来定义task:
task hello << {
println "hello world"
}
println "hello world"
}
这里也许大家可能会觉得很奇怪,为什么可以用"<<"来定义Task的执行内容呢,还是让我们看看Gradle的代码是怎么实现的吧:
1 public abstract class AbstractTask implements TaskInternal, DynamicObjectAware {
2 private List<Action<? super Task>> actions = new ArrayList<Action<? super Task>>();
3
4 public Task doFirst(Action<? super Task> action) {
5 if (action == null) {
6 throw new InvalidUserDataException("Action must not be null!");
7 }
8 actions.add(0, wrap(action));
9 return this;
10 }
11
12 public Task doLast(Action<? super Task> action) {
13 if (action == null) {
14 throw new InvalidUserDataException("Action must not be null!");
15 }
16 actions.add(wrap(action));
17 return this;
18 }
2 private List<Action<? super Task>> actions = new ArrayList<Action<? super Task>>();
3
4 public Task doFirst(Action<? super Task> action) {
5 if (action == null) {
6 throw new InvalidUserDataException("Action must not be null!");
7 }
8 actions.add(0, wrap(action));
9 return this;
10 }
11
12 public Task doLast(Action<? super Task> action) {
13 if (action == null) {
14 throw new InvalidUserDataException("Action must not be null!");
15 }
16 actions.add(wrap(action));
17 return this;
18 }
从上面的代码可以看出,Task类里有个Action的集合actions,当使用doFirst或者doLast时,实际上是将定义的执行部分实例化成Action的对象,然后添加到actions集合里。
明白了这一点,接下来让我们看看为什么可以使用<<定义Task--------Groovy作为强大的支持DSL的动态语言,早已经重载了 << 操作符,使得我们可以方便的使用<<向集合添加元素。
说道这,相信真相已经大白了:原来就是使用Groovy的特性,往集合里添加Action而已。对,这就是Gradle的语法,利用Groovy的DSL特性,帮助我们更容易的定义我们的构建脚本。
不过也许大家会觉得,这个例子实在是没有什么代表性,只是一个简单的 hello world,说明不了什么问题。好吧,别着急,下次我们会继续研究Gradle的其他部分,不过先记住:作为一个构建工具,Gradle真的很强大哦!
0 0
- 2 gradle 构建 和运行task
- Gradle-使用Gradle构建和测试-2-GradleTasks(一)
- Gradle-使用Gradle构建和测试-2-GradleTasks(二)
- 深入浅出Android Gradle构建系统(三:build task)
- 深入浅出Android Gradle构建系统 (三:build task)
- 深入浅出Android Gradle构建系统(三:build task)
- 深入浅出Android Gradle构建系统(三:build task)
- 深入浅出Android Gradle构建系统(三:build task)
- Step into Gradle - 02 - Project 和 Task
- Gradle for Android-创建task和plugin
- Gradle 使用指南 -- Gradle Task
- Gradle-使用Gradle构建和测试-1-Hello,Gradle
- 如何将自定义task在gradle系统task运行前后执行?
- 构建和运行
- 构建和运行
- java 构建和运行
- Gradle探索(2)-构建项目
- Gradle笔记2-构建脚本
- PHP---禁用缓存和文件下载
- 312. Burst Balloons[hard]
- Java 错误:找不到或无法加载主类
- FreeMarker标签与使用
- 排序算法---选择排序&堆排序&冒泡排序
- 2 gradle 构建 和运行task
- MYSQL学习心得(5) --时间戳转换
- BUG_ON内部实现分析
- vsftpd的安装(基于centos 7)
- 工作笔记之编译android时切换JDK
- Linux网络编程之socket文件传输示例
- java内部类(局部内部类)
- Deep Water: printf float in int type
- Hive 7. 表分类与表操作