博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Gradle-user guide-第6章 构建脚本基础(译)
阅读量:6264 次
发布时间:2019-06-22

本文共 2240 字,大约阅读时间需要 7 分钟。

  hot3.png

第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)

转载于:https://my.oschina.net/boltwu/blog/425607

你可能感兴趣的文章
Dynamic CRM 2013学习笔记(十六)用JS控制Tab可见,可用
查看>>
jquery对象和javascript对象相互转换
查看>>
laravel开启调试模式
查看>>
Spring aop的实现原理
查看>>
ADO.NET一小记-select top 参数问题
查看>>
(转)jquery easyui treegrid使用小结 (主要讲的是如何编辑easyui中的行信息包括添加 下拉列表等)...
查看>>
iOS使用宏写单例
查看>>
Isotig & cDNA & gene structure & alternative splicing & gene loci & 表达谱
查看>>
3、Cocos2dx 3.0游戏开发找小三之搭建开发环境
查看>>
携程Apollo(阿波罗)配置中心使用Google代码风格文件(在Eclipse使用Google代码风格)(配合阿里巴巴代码规约快速设置)...
查看>>
Hadoop(七)HDFS容错机制详解
查看>>
字符串中去除多余的空格保留一个(C#)
查看>>
Python随机字符串验证码
查看>>
SQL中 patindex函数的用法
查看>>
Vmware 虚拟机无法启动
查看>>
LeetCode: Partition List 解题报告
查看>>
如何查看Python对象的属性
查看>>
你所需要知道的一些git 的使用命令:历史
查看>>
mysql explain输出中type的取值说明
查看>>
iPhone开发之 - 苹果推送通知服务(APNs)编程
查看>>