文档章节

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

闪电
 闪电
发布于 2015/06/06 10:26
字数 1096
阅读 10
收藏 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 理解又更深了,但不想过段时间就又忘光了,所以打算写一篇读书笔记,将书中一些我个人觉得蛮有用的点记录、总结一下。 前言 首先,...

请叫我大苏
2018/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
2018/09/02
0
0
深入理解gradle编译-Android基础篇

9/27/2016 1:28:27 PM 深入理解gradle编译-Android基础篇 导读 Gradle基于Groovy的特定领域语言(DSL)编写的一种自动化建构工具,Groovy作为一种高级语言由Java代码实现,本文将对Gradle一些...

小米墨客
2016/10/12
3.6K
7

没有更多内容

加载失败,请刷新页面

加载更多

CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
1
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
2
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
3
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
昨天
3
0
深入理解JVM—JVM内存模型

深入理解JVM—JVM内存模型 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存...

onedotdot
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部