终止任务是一个正在开发的功能.这里的终止任务并不是指终止一个任务, 而是指一个无论运行结果如何最后都会被执行的任务.例子 15.27. 加入一个任务终止器build.gradletask taskX << { println 'taskX'}task taskY << { println 'taskY'}taskX.finalizedBy taskYgradle -q taskX 的输出>
Gradle 提供了好几种跳过一个任务的方式.1. 使用判断条件 (predicate)你可以使用 onlyIf() 方法来为一个任务加入判断条件. 就和 Java 里的 if 语句一样, 任务只有在条件判断为真时才会执行. 你通过一个闭包来实现判断条件. 闭包像变量一样传递任务, 如果任务应该被执行则返回真, 反之亦然. 判断条件在任务执行之前进行判断.例子 15.20. 使用判断条件跳过一个任务build.
有时候你想要替换一个任务. 举个例子, 如果你想要互换一个通过 java 插件定义的任务和一个自定义的不同类型的任务:例子 14.19. 覆写一个任务build.gradletask copy(type: Copy)task copy(overwrite: true) << { println('I am the new one.')}gradle -q copy 的输出> gradle -q copyI am the new one.
任务的排序功能正在测试和优化. 请注意, 这项功能在 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) <<
在这本教程的一开始 (第 6 章, 构建脚本基础) 你已经学习了如何创建简单的任务. 然后你也学习了如何给这些任务加入额外的行为, 以及如何在任务之间建立依赖关系.这些仅仅是用来构建简单的任务.Gradle 可以创建更为强大复杂的任务. 这些任务可以有它们自己的属性和方法.这一点正是和 Ant targets 不一样的地方.
Gradle 里的任何东西都是基于这两个基础概念:projects ( 项目 )tasks ( 任务 )每一个构建都是由一个或多个 projects 构成的.一个 project 到底代表什么依赖于你想用 Gradle 做什么. 举个例子,一个 project 可以代表一个 JAR 或者一个网页应用. 它也可能代表一个发布的 ZIP 压缩包,这个 ZIP 可能是由许多其他项目的 JARs 构成的.
关注时代Java