Gradle用户指南之初学者教程(三)

写在前面的话: 博主最近在学习Android Studio相关的东西。Gradle相对于我这个从Eclipse转过来的Android开发者,也算是一个全新的事物。但它却承担着Android构建系统中相当重要的一环。本着与人方便,自己方便的精神,觉得有必要翻译一下《Gradle User Guide》中的Tutorials相关部分。由于英语水平相当有限,请大家多多指教。

文章地址: 英文原文地址: 请尊重相关知识版权,谢谢。

第六章. 构建脚本基础6.1. Projects and tasks(工程和任务)

Gradle中的所有东西都以这两个概念为基础:projects 和 tasks.

每个Gradle构建都以一个或多个projects组合而成。一个project代表的意义依赖于你正在用Gradle处理什么。例如,一个project可能代表一个库(JAR)或网页应用(web application).它可能代表其他项目的库的ZIP压缩包发布版。一个project并不需要代表要构建的什么确切东西,它可能仅仅用来说明某个东西已经完成了,例如发布你的应用到工作或者生产环节去。如果你对这些概念性的东西还不够清楚,请不要紧张。Gradle的构建规则支持添加一个或多个project到底是什么的具体定义。

每个project都是有一个或多个tasks组成。一个task代表一个不可分割的构建工作。它可能编译一些calsses,创建JAR,生成Javadoc,或者发布一些文件到仓库里。

从现在开始,我们将把注意力集中在为一个project构建定义一些简单的tasks.后面的章节会深入学习处理多个projects的projects和tasks。

6.2. Hello world

当你用gradle命令运行一个Gradle构建的时候,gradle命令会在当前目录查找一个命名为build.gradle的文件。我们称呼build.gradle文件为构建脚本(build script),虽然严格来说,,它是一个构建配置脚本。这个构建脚本定义了一个project及一些和它相关的的tasks.

为了验证这个,创建一个build.gradle文件,并添加下面的构建脚本。

例子 6.1. 你的第一个构建脚本 build.gradle

task hello {doLast {println ‘Hello world!’}}

在命令行shell中,进入到包含这个build.gradle的目录,运行gradle -q hello去执行这个构建脚本。

例子 6.2. 运行一个构建脚本 gradle -q hello的输出

> gradle -q helloHello world!

这里发生了什么?这个构建脚本定义了一个单独的命名为hello的任务,并添加了一个动作进去。当你运行gradle hello的时候,Gradle执行了这个hello任务,继而执行了你提供的动作。这个动作是一个包含一些执行Groovy代码的闭包。

如果你觉得这个看起来像Ant target,你是对的。Gradle task任务和Ant target是差不多的,但你会看到,它们(Gradle)更强大.我们使用了一个和Ant不一样的专业术语,因为我们觉得task这个词比target更加传神。不幸的是,这是一个和ant冲突的术语,例如Ant中调用自己的命令,例如javac或copy,tasks。所以当我们提到tasks时,我们要说的是Gradle tasks.如果我们要说 Ant tasks(Ant 命令)时,我们会明确的说 Ant task。

6.3. A shortcut task definition(定义任务的快捷方式)

这里有一个快速定义一个task的方法,非常简洁,例如要定义上面提到的hell task。 例子6.3.一个task定义快捷方式 build.gradle

task hell << {println ‘Hello world!’}

同样,我们定义了一个名称为hello的可执行任务,其中包含了一个单独的闭包。我们将会在整个用户指南中使用这种风格的task定义方式。

6.4. Build scripts are code(构建脚本是代码)

Gradle构建脚本给予你一个全功能的Groovy。作为引子,请看下面这2个示例: 例子6.4. 在Gradle任务中使用Groovy build.gradle

task upper << {String someString = + someStringprintln “Upper case: ” + someString.toUpperCase()}

gradle -q upper 输出:

> gradle -q upperOriginal: mY_nAmEUpper case: MY_NAME

例子6.5. 在Gradle任务中使用Groovy build.gradle

task count << {4.times { print “$it ” }}

gradle -q count 输出:

> gradle -q count0 1 2 3 6.5. Task dependencies(任务依赖)

你很可能已经想到,你可以声明一些可以依赖于其他任务的任务。 例子6.6. 声明一个依赖于其他task的task build.gradle

task hello << {println ‘Hello world!’}task intro(dependsOn: hello) << {println “I’m Gradle”}

gradle -q intro 输出:

> gradle -q introHello world!I’m Gradle

可以添加一个还没存在的task作为依赖: 例子6.7. 懒依赖-另外的task还没存在 build.gradle

task taskX(dependsOn: ‘taskY’) << {println ‘taskX’}task taskY << {println ‘taskY’}

gradle -q taskX 输出:

> gradle -q taskXtaskYtaskX

taskX对应taskY的依赖关系先于taskY的定义。这对应多重项目构建非常重要。更多任务依赖的讨论可以参考 。 请注意,当你要关联一个未存在的task时,不可以使用快捷标记。(参看6.8小节)

6.6. Dynamic tasks(动态任务)

Groovy的能力远远大于定义一个单独的task.例如,你可以使用它来动态创建task。 例子6.8. 动态创建task build.gradle

4.times { counter ->task “task$counter” << {println “I’m task number $counter”}}

gradle -q task1 输出:

> gradle -q task1I’m task number 16.7. Mainipulating existing tasks (操作调整已经存在任务)

一旦任务被创建,任务就可以被API访问到。例如,你可以使用这个在运行时去动态给一个任务添加依赖。Ant是不允许这种行为的。 例子6.9. 通过API访问一个任务-添加一个依赖 build.gradle

4.times { counter ->task “task$counter” << {println “I’m task number $counter”}}task0.dependsOn task2, task3

gradle -q task0 输出:

> gradle -q task0I’m task number 2I’m task number 3I’m task number 0在乎的是看风景的心情,旅行不会因为美丽的风景终止。

Gradle用户指南之初学者教程(三)

相关文章:

你感兴趣的文章:

标签云: