当 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"(命令行)选项卡中,或者在"
在“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 dependencyInsight 命令可以查看指定的依赖. 如下面的例子.例 11.15. 获取特定依赖gradle -q webapp:dependencyInsight --dependency groovy --configuration compile 的输出结果> gradle -q webapp:dependencyInsight --dependency groovy --configuration compileorg.codehaus.groovy:groovy-all:2.3.
执行 gradle dependencies 命令会列出项目的依赖列表, 所有依赖会根据任务区分,以树型结构展示出来.如下例:例 11.13. 获取依赖信息gradle -q dependencies api:dependencies webapp:dependencies 的输出结果>
执行 gradle tasks 命令会列出项目中所有任务.这会显示项目中所有的默认任务以及每个任务的描述.例 11.9 获取任务信息gradle -q tasks 命令的输出>
执行 gradle projects 命令会为你列出子项目名称列表.例 11.7. 收集项目信息gradle -q projects 命令的输出结果>
Gradle提供了许多内置任务来收集构建信息.这些内置任务对于了解依赖结构以及解决问题都是很有帮助的.了解更多,可以参阅项目报告插件以为你的项目添加构建报告
调用 gradle 命令时,默认情况下总是会构建当前目录下的文件, 可以使用 -b 参数选择其他目录的构建文件,并且当你使用此参数时 settings.gradle 将不会生效,看下面的例子:例 11.5. 选择文件构建subdir/myproject.gradletask hello << { println "using build file '$buildFile.name' in '$buildFile.parentFile.name'."}gradle -q -b subdir/myproject.
当你试图调用某个任务的时候,你并不需要输入任务的全名.只需提供足够的可以唯一区分出该任务的字符即可.例如,上面的例子你也可以这么写.用 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 任务, 它们所依赖的任务也会被调用. 这些任务只会被调用一次, 无论它们是否被包含在脚本中:即无论是以命令行的形式定义的任务还是依赖于其它任务都会被调用执行.来看下面的例子.
关注时代Java