当 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 下同时也会生成一份日志记录记录.
执行 gradle tasks 命令会列出项目中所有任务.这会显示项目中所有的默认任务以及每个任务的描述.例 11.9 获取任务信息gradle -q tasks 命令的输出>
执行 gradle projects 命令会为你列出子项目名称列表.例 11.7. 收集项目信息gradle -q projects 命令的输出结果>
当你试图调用某个任务的时候,你并不需要输入任务的全名.只需提供足够的可以唯一区分出该任务的字符即可.例如,上面的例子你也可以这么写.用 gradle di 来直接调用 dist 任务:例 11.3. 简化任务名gradle di 命令的输出>
你可以用命令行选项-x来排除某些任务,让我们用上面的例子来示范一下.例子 11.2. 排除任务gradle dist -x test 命令的输出> gradle dist -x test:compilecompiling source:distbuilding the distributionBUILD SUCCESSFULTotal time: 1 secs可以看到, test 任务并没有被调用,即使它是 dist 任务的依赖.
你可以以列表的形式在命令行中一次调用多个任务.例如 gradle compile test 命令会依次调用 compile 和 test 任务, 它们所依赖的任务也会被调用. 这些任务只会被调用一次, 无论它们是否被包含在脚本中:即无论是以命令行的形式定义的任务还是依赖于其它任务都会被调用执行.来看下面的例子.
本章介绍了命令行的一些基本功能.正如在前面的章节里你所见到的调用 gradle 命令来运行一个构建.
了解更多关于War plugin和Jetty plugin的应用请参阅Chapter 26,The War Plugin以及Chapter 28,The Jetty Plugin.你可以在发行包的samples/webApplication下找到更多示例.
这一章描述了一个非常简单的 Groovy 项目. 通常, 一个真正的项目要比这个复杂的多. 因为 Groovy 项目是一个 Java 项目, 任何你可以对 Java 项目做的配置也可以对 Groovy 项目做.Chapter 24,The Groovy Plugin有更加详细的描述, 你也可以在 samples/groovy 目录里找到更多的例子.
依赖配置也可以用来发布文件[3]. 我们称这些文件publication artifacts, 或者就叫 artifacts.插件可以很好的定义一个项目的 artifacts, 所以你并不需要做一些特别的工作来让 Gradle 需要发布什么. 你可以通过在 uploadArchives 任务里加入仓库来完成. 下面是一个发布远程 Ivy 库的例子:例子 8.8. 发布一个 Ivy 库build.
Gradle 是怎样找到那些外部依赖的文件的呢? Gradle 会在一个repository(仓库)里找这些文件. 仓库其实就是文件的集合, 通过 group, name 和 version 整理分类. Gradle 能解析好几种不同的仓库形式, 比如 Maven 和 Ivy, 同时可以理解各种进入仓库的方法, 比如使用本地文件系统或者 HTTP.默认地, Gradle 不提前定义任何仓库. 在使用外部依赖之前, 你需要自己至少定义一个库.
你可以声明许多种依赖. 其中一种是external dependency(外部依赖). 这是一种在当前构建之外的一种依赖, 它被存放在远程或本地的仓库里, 比如 Maven 的库, 或者 Ivy 库, 甚至是一个本地的目录.下面的例子讲展示如何加入外部依赖例子 8.2. 定义一个外部依赖build.gradledependencies { compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.
关注时代Java