构建基础
Projects 和 tasks
projects 和 tasks是 Gradle 中最重要的两个概念。
任何一个 Gradle 构建都是由一个或多个 projects 组成。每个 project 包括许多可构建组成部分。 这完全取决于你要构建些什么。举个例子,每个 project 或许是一个 jar 包或者一个 web 应用,它也可以是一个由许多其他项目中产生的 jar 构成的 zip 压缩包。一个 project 不必描述它只能进行构建操作。它也可以部署你的应用或搭建你的环境。不要担心它像听上去的那样庞大。 Gradle 的 build-by-convention 可以让您来具体定义一个 project 到底该做什么。
每个 project 都由多个 tasks 组成。每个 task 都代表了构建执行过程中的一个原子性操作。如编译,打包,生成 javadoc,发布到某个仓库等操作。
Hello world
可以通过在命令行运行 gradle 命令来执行构建,gradle 命令会从当前目录下寻找 build.gradle 文件来执行构建。我们称 build.gradle 文件为构建脚本。
第一个构建脚本
build.gradle
task hello {doLast {println 'Hello world!'}}
然后在该文件所在目录执行 gradle -q hello
-q 参数的作用是什么? 该文档的示例中很多地方在调用 gradle 命令时都加了 -q 参数。该参数用来控制 gradle 的日志级别,可以保证只输出我们需要的内容。具体可参阅Gradle 日志
执行脚本
wjs@wjsdeMBP temp % vi build.gradlewjs@wjsdeMBP temp % gradle -q helloHello world!
快速定义任务
用一种更简洁的方式来定义上面的 hello 任务。
build.gradle
task hello {println 'Hello world!'}
通过 API 进行任务之间的通信 - 增加任务行为
task hello << {println 'Hello Earth'}hello.doFirst {println 'Hello Venus'}hello.doLast {println 'Hello Mars'}hello << {println 'Hello Jupiter'}Output of gradle -q hello> gradle -q helloHello VenusHello EarthHello MarsHello Jupiter
doFirst 和 doLast 可以进行多次调用。他们分别被添加在任务的开头和结尾。当任务开始执行时这些动作会按照既定顺序进行。其中 << 操作符 是 doLast 的简写方式。
增加自定义属性
可以为一个任务添加额外的属性。例如,新增一个叫做 myProperty 的属性,用 ext.myProperty 的方式给他一个初始值。这样便增加了一个自定义属性。
为任务增加自定义属性
build.gradle
task myTask {ext.myProperty = "myValue"}task printTaskProperties << {println myTask.myProperty}Output of gradle -q printTaskProperties\> gradle -q printTaskPropertiesmyValue
定义默认任务
定义默认任务
build.gradle
defaultTasks 'clean', 'run'task clean << {println 'Default Cleaning!'}task run << {println 'Default Running!'}task other << {println "I'm not a default task!"}Output of gradle -q\> gradle -qDefault Cleaning!Default Running!
依赖任务的不同输出
build.gradle
task distribution << {println "We build the zip with version=$version"}task release(dependsOn: 'distribution') << {println 'We release now'}gradle.taskGraph.whenReady {taskGraph ->if (taskGraph.hasTask(release)) {version = '1.0'} else {version = '1.0-SNAPSHOT'}}Output of gradle -q distribution\> gradle -q distributionWe build the zip with version=1.0-SNAPSHOTOutput of gradle -q release\> gradle -q releaseWe build the zip with version=1.0We release now
