有许多种加入依赖的方式. 在 6.5 小节, “任务依赖”里, 你已经学习了如何使用任务的名称定义依赖. 任务名称可以指向同一个项目里的任务, 或者其他项目里的任务. 为了指向其他项目, 你必须在任务的名称前加入项目的路径. 下面的例子给 projectA:taskX 加入依赖 projectB:taskY :例子 15.11. 从另外一个项目给任务加入依赖build.
举一个例子, 让我们看一看 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) <<
在这本教程的一开始 (第 6 章, 构建脚本基础) 你已经学习了如何创建简单的任务. 然后你也学习了如何给这些任务加入额外的行为, 以及如何在任务之间建立依赖关系.这些仅仅是用来构建简单的任务.Gradle 可以创建更为强大复杂的任务. 这些任务可以有它们自己的属性和方法.这一点正是和 Ant targets 不一样的地方.
每个闭合都有一个委托对象,当闭合既不是局部变量也不是作为方法参数时,Groovy 使用委托对象查找变量和方法引用. 当委托对象被用来管理时,Gradle 使用它来管理闭合.例子 13.9.闭合引用build.gradledependencies { assert delegate == project.dependencies testCompile('junit:junit:4.11') delegate.testCompile('junit:junit:4.11')}
Groovy 为预定义的 List 和 Map 集合提供了一些操作捷径,这两个字面值都比较简单易懂,但是 Map 会有一些不同.例如,当您使用 "apply" 方法使用 plug 时,apply 会自动加上 Map 的一个参数,当您这样写 " apply plugin: 'java' "时,实际上使用的是 name 参数(name-value),只不过在 Groovy 中 使用 Map 没有 < >
在调用方法时,圆括号可有可无,是个可选的.例子: 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 接口,所以你可以在自己的脚本中使用它们.
Project 对象提供了一些标准的属性,您可以在构建脚本中很方便的使用他们.
在第七章 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"(命令行)选项卡中,或者在"
关注时代Java