文档章节

Gradle-user guide-第6章 构建脚本基础(译)

闪电
 闪电
发布于 2015/06/06 10:26
字数 1096
阅读 9
收藏 0

第6章 构建脚本基础(6.1-6.5)

6.1. 项目和任务

Gradle里的一切都基于这两个基本概念:项目和任务(projects and tasks

每个Gradle构建都由一个或多个项目构成。一个项目代表什么取决于你想要用Gradle去做什么。举个列子,一个项目可能代表一个Jar或者一个web应用,它也可能代表一个由其他项目生成的jar包组成的ZIP压缩包。项目不必代表准备构建的东西,它可能代表准备完成的事情,如,部署你的应用到生产环境。如果你仍感觉有些模糊也不用担心。Gradle的惯例构建的支持,增加了对项目是什么更加充分的定义。

每个Gradle项目都由一个或多个任务构成。任务代表构建执行的一些原子级别的操作,可能是编译一些classes,创建一个Jar,生成Javadoc,把一些存档(archives)发布到仓库(repository)。

目前,我们将关注在单项目构建中定义一些简单的任务。之后的章节中,我们会关注多项目构建,以及多项目和多任务混合的构建。

 6.2.Hello world

使用gradle命令运行Gradle构建,gradle命令会在当前目录下寻找名为build.gradle的文件,我们称这个文件为构建脚本(buildscript),虽然确切来说,它是一个构建配置脚本(build configuration script)。这个脚本定义了一个项目和它的一些任务。

试着创建下面名为build.gradle的构建脚本。

例子6.1第一个构建脚本

build.gradle

task hello{
    do last{
        println 'hello word!'
    }
}

在命令行里,进入该构建脚本所在目录,通过命令gradle -q hello来执行这个构建脚本。

例子6.2脚本的执行

gradle -qhello命令的输出

> gradle -q hello
Hello world!

这里发生了什么?上面的构建的脚本定义了一个单一的任务,hello,给它添加了一个action,当你运行gradle hello,Gradle执行hello任务,接着就执行你提供的action,这个action是一个简单的包含了一些Groovy代码的闭包。

如果你觉得这些看上去和Ant的目标(targets)很相似,好吧,你是对的。Gradle任务等同于Ant中的目标,但是,你会看到gradle任务是更加强大的。我们使用一个不同于Ant的术语,是因为我们认为任务(task)比目标(target)更加贴切。不过,这里术语的使用和Ant产生了冲突,在Ant中,称命令为任务,如javaccopy,因此当我们说到任务时,总是指的是Gradle里的任务,等价于Ant中的目标,而说到Ant任务时,会明确地说成Ant任务(anttask)。

6.3快捷任务定义

有一种定义任务的简洁方式

例子6.3快捷任务定义

build.gradle

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

再次,这定义了一个叫做hello的任务,它是一个可以执行的闭包,在贯穿整个用户手册中,我们使用这种定义任务的方式。

6.4构建脚本代码

Gradle构建脚本向你展示Groovy的所有能力,作为开胃菜,看看这个:

例子6.4Gradle任务中使用Groovy

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
6.5任务依赖
正如你可能已经猜到的,你可以申明任务之间的依赖性。
例子6.6申明任务之间的依赖性

build.gradle

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

使用gradle -q intro,你就会看到以下输出:

> gradle -q intro
Hello world!
I'm Gradle
再加入一个依赖之前, 这个依赖的任务不需要提前定义了,来看下面的例子。
build.gradle

task taskX(dependsOn: 'taskY') << {
    println 'taskX'
}
task taskY << {
    println 'taskY'
}

使用gradle -q taskX,输出如下:

> gradle -q taskX
taskY
taskX
taskX taskY的依赖性在taskY定义之前就被申明了,这中定义方式对多项目构建来说是非常重要的。任务依赖性的更多细节将会在15.4中讨论。
注意,当你将要引用的任务还没有定义时,不要使用快捷标记。(参考6.8

本文转载自:http://blog.csdn.net/tudayu123/article/details/38417435

共有 人打赏支持
闪电
粉丝 74
博文 392
码字总数 6789
作品 0
海淀
技术主管
读书笔记--Android Gradle权威指南(上)

最近看了一本书《Android Gradle 权威指南》,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所以打算写一篇读书笔记,将书中一些我个人觉得蛮有用的点记录、总结一下。 前言 首先,...

请叫我大苏
05/24
0
0
「译」JUnit 5 系列:环境搭建

原文地址:http://blog.codefx.org/libraries/junit-5-setup/ 原文日期:15, Feb, 2016 译文首发: Linesh 的博客:环境搭建 我的 Github:http://github.com/linesh-simplicity 2015年11月,......

Linesh
2016/09/17
54
0
Gradle入门系列(5):创建多项目构建

转载: 本文由 伯乐在线 - JustinWu 翻译,黄利民 校稿。未经许可,禁止转载! 英文出处:petrikainulainen。欢迎加入翻译组。 尽管我们可以仅使用单个组件来创建可工作的应用程序,但有时候...

低至一折起
2017/12/05
0
0
bboss/pinpoint-plugin-generate

This is a pinpoint agent plugin generate tool. 以分布式全文检索elasticsearch客户端框架bboss elasticsearch为实例,介绍服务调用链路日志采集插件的生成及集成方法, 需要被拦截监控的b...

bboss
09/02
0
0
Gradle入门系列(3):依赖管理

转载: 本文由 伯乐在线 - JustinWu 翻译。未经许可,禁止转载! 英文出处:Petri Kainulainen。欢迎加入翻译组。 在现实生活中,要创造一个没有任何外部依赖的应用程序并非不可能,但也是极...

低至一折起
2017/12/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

解决访问swaggerUI接口文档显示basic-error-controler问题

使用swagger生成接口文档后,访问http://localhost:8888/swagger-ui.html#/,显示如下: 解决方法: public Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2)......

张欢19933
24分钟前
1
0
区块链教程以太坊源码分析core-state-process源码分析(二)

兄弟连区块链教程以太坊源码分析core-state-process源码分析(二):关于g0的计算,在黄皮书上由详细的介绍和黄皮书有一定出入的部分在于if contractCreation && homestead {igas.SetUin...

兄弟连区块链入门教程
29分钟前
0
0
BLAKE2 — fast secure hashing

BLAKE2 — fast secure hashing SPECS | CODE | B2SUM | CONTACT | USERS | THIRD-PARTY SOFTWARE | CRYPTANALYSIS | FAQ Come from http://www.blake2.net/ BLAKE2 is a cryptographic has......

openthings
35分钟前
4
0
Titan Framework MongoDB深入理解3

在前两篇文章中,我们介绍了操作Mongo数据库的类型Curd和Finder,下面要理解的是框架内mongoDB操作的条件类型——MongoDBQueryCondition。 MongoDBQueryCondition是一个接口,规定了一些实现...

云季科技
35分钟前
0
0
数据结构(算法)-树

#include <iostream>#include <malloc.h>using namespace std;#define MaxSize 100typedef char ElemType;typedef struct node{ElemType data;struct node *left ,*......

ashuo
37分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部