title: Gradle (四)任务date: 2021-06-19 23:02:59.669 updated: 2021-06-20 14:31:34.165 url: /?p=251 categories: Gradle tags: gradle
任务 简介 Gradle 构建脚本描述一个或多个项目,每个项目都由不同的任务组成。
任务是构建执行的一项工作,可以是编译一些类,将类文件存储到单独的目标文件夹中,创建 JAR ,生成 Javadoc 或将一些归档发布到存储库。
定义任务 任务是用于将任务定义到构建脚本中的关键字。此脚本创建了一个名为fristGradle
的任务:
1 2 3 4 5 task fristGradle{ doLast{ println 'hello world,fristGradle' } }
在当前目录下执行命令:
1 2 D:\development_coding\GradleTest> gradle -q fristGradle hello world,fristGradle
定位任务 如果要查找在构建文件中定义的任务,则必须使用相应的标准项目属性。这意味着每个任务都可以作为项目的属性,使用任务名称作为属性名称。
看看下面的代码访问任务作为属性。将以下代码复制并保存到 build.gradle
文件中。
1 2 3 4 task fristTask println fristTask.name println project.fristTask.name
在build.gradle
文件的目录下,执行如下命令:
1 2 3 D: \development_coding\GradleTest> gradle -q fristTaskfristTask fristTask
还可以通过 tasks (任务集合) 使用所有属性
将以下代码复制并保存到 build.gradle
文件中。
1 2 3 4 5 6 task fristTask task fristTask2 println fristTask.name println tasks['fristTask' ].name println tasks['fristTask2' ].name
在build.gradle
文件的目录下,执行如下命令:
1 2 3 4 D: \development_coding\GradleTest> gradle -q fristTaskfristTask fristTask fristTask2
依赖关系 将build.gradle
代码修改成如下:
1 2 3 4 5 6 7 8 9 10 11 12 task fristGradle{ doLast{ println 'hello world,fristGradle' } } task secondGradle(dependsOn: fristGradle){ doLast{ println 'secondGradle' } }
执行脚本如下:
1 2 3 D:\development_coding\GradleTest> gradle -q secondGradle hello world,fristGradle secondGradle
另外一种形式实现任务依赖
build.gradle
1 2 3 4 5 6 7 8 9 10 11 12 13 task task1{ doLast{ println 'hello task1' } } task task2{ doLast{ println 'hello task2' } } task1.dependsOn task2
输出:
1 2 3 D:\development_coding\GradleTest> gradle -q task1 hello task2 hello task1
通过闭包,添加依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 task taskName{ doLast{ println 'hello task1' } } taskName.dependsOn { tasks.findAll{ task -> task.name.startsWith('lib' ) } } task lib1{ doLast{ println 'hello lib1' } } task lib2{ doLast{ println 'hello lib2' } } task lib3{ doLast{ println 'hello lib3' } } task noLib{ doLast{ println 'hello noLib' } }
输出:
1 2 3 4 5 D:\development_coding\GradleTest> gradle -q taskName hello lib1 hello lib2 hello lib3 hello task1
task之间能否相互依赖?
1 2 3 4 5 6 7 8 9 10 11 task fristGradle(dependsOn: secondGradle){ doLast{ println 'hello world,fristGradle' } } task secondGradle(dependsOn: fristGradle){ doLast{ println 'secondGradle' } }
emmm,直接报错。所以 task 之间的不能相互依赖。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 PS D:\development_coding\GradleTest> gradle -q fristGradle FAILURE: Build failed with an exception. * Where: Build file 'D:\development_coding\GradleTest\build.gradle' line: 2 * What went wrong: A problem occurred evaluating root project 'GradleTest' . > Could not get unknown property 'secondGradle' for root project 'GradleTest' of type org.gradle.api.Project. * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 2s
跳过任务 如果用于跳过任务的逻辑不能用谓词表示,则可以使用StopExecutionException
。如果操作抛出此异常,则会跳过此操作的进一步执行以及此任务的任何后续操作的执行, 构建继续执行下一个任务。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 task compile { doLast{ println 'We are doing the compile.' } } compile.doFirst { if (true ) { throw new StopExecutionException() } } task myTask(dependsOn: 'compile' ) { doLast{ println 'I am not affected' } }
1 2 PS D:\development_coding\GradleTest> gradle -q myTask I am not affected