任务的排序功能正在测试和优化. 请注意, 这项功能在 Gradle 之后的版本里可能会改变.在某些情况下, 我们希望能控制任务的的执行顺序, 这种控制并不是向上一张那样去显示地加入依赖关系. 最主要的区别是我们设定的排序规则不会影响那些要被执行的任务, 只是影响执行的顺序本身. 好吧, 我知道可能有点抽象.我们来看看以下几种有用的场景:执行连续的任务: eg.
举一个例子, 让我们看一看 Gradle 自带的 Copy task. 为了创建一个 Copy task, 你需要在你的构建脚本里先声明它:例子 15.7. 创建一个 copy taskbuild.gradletask myCopy(type: Copy)它创建了一个没有默认行为的 copy task. 这个 task 可以通过它的 API 来配置(参考 Copy). 接下来例子展示了不同的实现方法.
你经常需要在构建文件里找到你定义的 tasks,举个例子,为了配置它们或者使用它们作为依赖. 有许多种方式都可以来实现定位.首先,每一个任务都必须是一个 project 的有效属性,并使用任务名来作为属性名:例子 15.4. 通过属性获取 tasksbuild.gradletask helloprintln hello.nameprintln project.hello.nameTasks 也可以通过 tasks collection 来得到.例子 15.5.
我们已经在第 6 章学习了定义任务的形式 (keyword 形式). 当然也会有一些定义形式的变化来适应某些特殊的情况. 比如下面的例子中任务名被括号括起来了. 这是因为之前定义简单任务的形式 (keyword 形式) 在表达式里是不起作用的.例子 15.1. 定义 tasksbuild.gradletask(hello) <<
在调用方法时,圆括号可有可无,是个可选的.例子: 13.6.不使用圆括号调用方法build.gradletest.systemProperty 'some.prop', 'value'test.systemProperty('some.prop', 'value')
Groovy 自动将一个属性的引用转换为相应的 getter 或 setter 方法.例子: 13.5. 属性存取器// 使用 getter 方法println project.buildDirprintln getProject().getBuildDir()// 使用 setter 方法project.buildDir = 'target'getProject().setBuildDir('target')
Groovy 在 Java 基础上添加了很多有用的方法. 例如,Iterable 有一个 each 方法, 通过使用 each 方法,我们可以迭代出 Iterable 中的每一个元素:例子: 13.4.Groovy JDK 方法build.gradleconfiguration.runtime.each { File f -> println f }更多内容请阅读 http://groovy.codehaus.org/groovy-jdk/
Groovy 提供了大量的特性用来创建 DSL. Gradle 构建语言知道 Groovy 语言的工作原理,并利用这些特性帮助您编写构建脚本,特别是您在编写 plugin 或者 task 的时候,你会觉得很方便.
在 Gradle 领域模型中所有被增强的对象能够拥有自己定义的属性. 这包括,但不仅限于 projects , tasks , 还有 source sets . Project 对象可以添加,读取,更改扩展的属性. 另外,使用 ext 扩展块可以一次添加多个属性.例子 13.3. 使用扩展属性build.gradleapply plugin: "java"ext { springVersion = "3.1.0.RELEASE" emailNotification = "build@master.
局部变量使用关键字 def 来声明,其只在声明它的地方可见 . 局部变量是 Groovy 语言的一个基本特性.例子 13.2 . 使用局部变量 def dest = "dest" task copy(type: Copy) { form "source" into dest }
在 Gradle 构建脚本中有两种类型的变量可以声明:局部变量 ( local ) 和 扩展属性 ( extra ) .
当 Gradle 执行一个脚本时,它会将这个脚本编译为实现了 Script 的类. 也就是说所有的属性和方法都是在 Script 接口中声明的,由于你的脚本实现了 Script 接口,所以你可以在自己的脚本中使用它们.
在第七章 Java构建入门那部分我们使用了 apply() 方法,这个方法是从哪里来的呢? 我们之前说过Gradle在构建脚本中定义了一个项目. 对于构建脚本中每个项目,Gradle 都创建了一个 Project 类型的对象用来关联此项目. 当构建脚本执行时,它会去配置所关联的工程对象.
Gradle 是以 Groovy 语言为基础, 基于DSL (领域特定语言) 语法的自动化构建工具,但是它增加了一些额外的特性,这使得Gradle更加的容易去阐释构建.一个构建脚本能够包含任何Groovy语言的元素 ( Any language element except for statement labels ), 每个构建脚本都使用UTF-8编码.
在设置界面,你可以配置一些常用的设置.图 12.2 设置界面“Current Directory” 图形界面会默认设置您的Gradle项目的根目录(build.gradle 文件所在的目录)为当前目录.“Stack Trace Output“ 这个选项可以指定当错误发生时,有多少信息可以写入到轨迹栈中,注意:在您设定轨迹栈级别后,如果"Command Line"(命令行)选项卡中,或者在"
在“Command Line”选项卡,您只需将命令填入到gradle输入框. 就可以直接执行单个的Gradle命令. 或者说在您将某个命令添加到收藏夹之前,您想看看是什么效果的话,不妨来这里试试.
"Favorites"选项卡是个好地方. 您可以收藏常用的命令. 即使是复杂的命令集,只要它符合Gradle规范,您都可以添加收藏,而且您还可以为它起个通俗易懂的别名. 这个方法逼格是不是很高. 一个一眼看上去就让人明白的自定义的命令,我们可以称它为“侩子手”(fast build).
任务树使用分层方式显示了所有的项目和它们的任务,双击一个任务,您就可以执行它.另外我们还可以使用过滤器过滤掉不常用的任务. 您可以点击 Filter 按钮来设置过滤条件. 设定哪些任务和项目可以显示. 隐藏的任务会使用红色来标记.注意:最新被创建的任务会默认被显示出来(相反是被隐藏).
为了辅助传统的命令行交互,Gradle还提供了一个图形界面.我们可以使用Gradle命令中--gui选项来启动它.例子 12.1. 启动图形界面gradle --gui注意:这个命令执行后会使得命令行一直处于封锁状态,直到我们关闭图形界面.不过我们可以另外加上“&”让它在后台执行:gradle --gui&如果我们从自己的Gradle项目目录中启动这个图形界面,我们应该会看到任务树.图 12.1.
--profile 参数可以收集一些构建期间的信息并保存到 build/reports/profile 目录下. 并且会以构建时间命名这些文件.下面是一份日志.这份日志记录了总体花费时间以及各过程花费的时间.并以时间大小倒序排列.并且记录了任务的执行情况.如果采用了 buildSrc,那么在 buildSrc/build 下同时也会生成一份日志记录记录.
关注时代Java