Gradle构建脚本描述一个或多个项目。每个项目都由不同的任务组成。任务是构建执行的一项工作。任务可以是编译一些类,将类文件存储到单独的目标文件夹中,创建JAR,生成Javadoc或将一些归档发布到存储库。
任务是用于将任务定义到构建脚本中的关键字。看看下面的例子,它是一个叫作 hello 的任务,将打印一个字符串:hello world
。将以下脚本复制并保存到 build.gradle
文件中。 此构建脚本定义一个名称为 “hello” 的任务,用于打印hello world
字符串。
task hello { |
doLast { |
println 'hello world' |
} |
} |
在存储 build.gradle
文件的目录位置执行以下命令,应该看到输出结果如下
D:/worksp/web3.com/gradle-3.1/study/script>gradle -q hello |
hello world |
可以通过为 doLast
语句指定快捷方式(表示符号 <<
)来简化此 hello
任务。如果添加这个快捷方式到上面的 hello 任务中,参考如下脚本。
task hello << { |
println 'hello world' |
} |
在存储 build.gradle
文件的目录位置执行以下命令,应该看到输出结果如下
D:/worksp/web3.com/gradle-3.1/study/script>gradle -q hello |
hello world |
任务依赖关系
您可能已经猜到,可以声明依赖于其他任务的任务。下面声明依赖于其他任务的任务,将以下代码复制并保存到build.gradle
文件中。
task hello << { |
println 'Hello world!' |
} |
task intro(dependsOn: hello) << { |
println "I'm Gradle" |
} |
build.gradle
文件的目录位置执行以下命令,应该看到输出结果如下
D:/worksp/web3.com/gradle-3.1/study/script>gradle -q intro |
Hello world! |
I'm Gradle |
要添加依赖关系,相应的任务不需要存在。懒依赖 - 其他任务不存在,将以下代码复制并保存到build.gradle
文件中。
task taskX(dependsOn: 'taskY') << { |
println 'taskX' |
} |
task taskY << { |
println 'taskY' |
} |
在存储 build.gradle
文件的目录位置执行以下命令,应该看到输出结果如下
D:/worksp/web3.com/gradle-3.1/study/script>gradle -q taskX |
taskY |
taskX |
如果要查找在构建文件中定义的任务,则必须使用相应的标准项目属性。这意味着每个任务都可以作为项目的属性,使用任务名称作为属性名称。
看看下面的代码访问任务作为属性。将以下代码复制并保存到build.gradle
文件中。
task hello |
println hello.name |
println project.hello.name |
在存储 build.gradle
文件的目录位置执行以下命令,应该看到输出结果如下
D:/worksp/web3.com/gradle-3.1/study/script>gradle -q hello |
hello |
hello |
您还可以通过任务集合使用所有属性。
将以下代码复制并保存到build.gradle
文件中。
task hello |
println tasks.hello.name |
println tasks['hello'].name |
在存储 build.gradle
文件的目录位置执行以下命令,应该看到输出结果如下
D:/worksp/web3.com/gradle-3.1/study/script>gradle -q hello |
hello |
hello |
向任务添加依赖关系
要将一个任务依赖于另一个任务,这意味着当一个任务完成时,另一个任务将开始。 每个任务都使用任务名称进行区分。 任务名称集合由其任务集合引用。 要引用另一个项目中的任务,应该使用项目路径作为相应任务名称的前缀。
以下示例将从任务taskX
添加依赖项到任务taskY
。
task taskX << { |
println 'taskX' |
} |
task taskY(dependsOn: 'taskX') << { |
println "taskY" |
} |
在存储 build.gradle
文件的目录位置执行以下命令,应该看到输出结果如下
D:/worksp/web3.com/gradle-3.1/study/script>gradle -q taskY |
taskX |
taskY |
上面的例子是通过使用名字添加对任务的依赖。 还有另一种方法实现任务依赖性,即使用Task对象定义依赖性。
现在采用上面任务的相同示例,但是使用任务对象而不是任务参考名称来实现依懒关系。
将以下代码复制并保存到build.gradle
文件中。
task taskY << { |
println 'taskY' |
} |
task taskX << { |
println 'taskX' |
} |
taskY.dependsOn taskX |
build.gradle
文件的目录位置执行以下命令,应该看到输出结果如下
D:/worksp/web3.com/gradle-3.1/study/script>gradle -q taskY |
taskX |
taskY |
taskX
添加依赖项到项目中的所有任务,其名称以“lib
”开头。build.gradle
文件中。
task taskX << { |
println 'taskX' |
} |
taskX.dependsOn { |
tasks.findAll { |
task -> task.name.startsWith('lib') |
} |
} |
task lib1 << { |
println 'lib1' |
} |
task lib2 << { |
println 'lib2' |
} |
task notALib << { |
println 'notALib' |
} |
build.gradle
文件的目录位置执行以下命令,应该看到输出结果如下
D:/worksp/web3.com/gradle-3.1/study/script>gradle -q taskX |
lib1 |
lib2 |
taskX |
可以向任务添加描述。 执行Gradle
任务时会显示此描述。 这可以通过使用description
关键字。
将以下代码复制并保存到build.gradle
文件中。
task copy(type: Copy) { |
description 'Copies the resource directory to the target directory.' |
from 'resources' |
into 'target' |
include('**/*.txt', '**/*.xml', '**/*.properties') |
println("description applied") |
} |
build.gradle
文件的目录位置执行以下命令,应该看到输出结果如下
D:/worksp/web3.com/gradle-3.1/study/script>gradle -q taskX |
description applied |
如果用于跳过任务的逻辑不能用谓词表示,则可以使用StopExecutionException
。 如果操作抛出此异常,则会跳过此操作的进一步执行以及此任务的任何后续操作的执行。 构建继续执行下一个任务。
将以下代码复制并保存到build.gradle
文件中。
task compile << { |
println 'We are doing the compile.' |
} |
compile.doFirst { |
// Here you would put arbitrary conditions in real life. |
// But this is used in an integration test so we want defined behavior. |
if (true) { throw new StopExecutionException() } |
} |
task myTask(dependsOn: 'compile') << { |
println 'I am not affected' |
} |
build.gradle
文件的目录位置执行以下命令,应该看到输出结果如下
D:/worksp/web3.com/gradle-3.1/study/script>gradle -q myTask |
I am not affected |