gradle学习2-任务
Posted ityousee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gradle学习2-任务相关的知识,希望对你有一定的参考价值。
前言
每个项目都由不同的任务组成,任务可以是编译一些类,将类文件存储到单独的目标文件夹中,创建JAR,生成Javadoc或将一些归档发布到存储库。
定义任务
创建一个叫作 hello 的任务,将打印一个字符串:
hello ityousee。将以下脚本复制并保存到
build.gradle文件中。 此构建脚本定义一个名称为 “hello” 的任务,用于打印
hello ityousee`字符串。
task hello {
doLast {
println 'hello ityousee'
}
}
或者以下方式简化操作:
task hello <<{
println 'hello ityousee'
}
切换到该文件所在目录,打开cmd窗口,运行gradle -q hello运行结果如下:
hello ityousee
任务依赖关系
一个任务可以依赖于其他任务完成后才执行,输入如下代码,保存到
build.gradle
文件中
task hello << {
println 'Hello ityousee!'
}
task hello2(dependsOn: hello) << {
println "Hello ityousee2!"
}
切换到该文件所在目录,打开cmd窗口,运行gradle -q hello2 运行结果如下:
Hello ityousee2!
Hello ityousee!
上面的例子是通过使用名字添加对任务的依赖。 还有另一种方法实现任务依赖性,即使用Task对象定义依赖性。
将以下代码复制并保存到build.gradle
文件中,输出结果与上面一致。
task hello << {
println 'Hello ityousee!'
}
task hello2 << {
println "Hello ityousee2!"
}
task hello2.dependsOn hello
还有另一种方法来添加任务依赖,它就是通过使用闭包。
将以下代码复制并保存到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
文件的目录位置执行以下命令,应该看到输出结果如下
lib1
lib2
taskX
定位任务
如果要查找在构建文件中定义的任务,则必须使用相应的标准项目属性。这意味着每个任务都可以作为项目的属性,使用任务名称作为属性名称。
将以下代码复制并保存到build.gradle
文件中。
task hello
println hello.name
println project.hello.name
在存储 build.gradle
文件的目录位置执行gradle -q hello
,应该看到输出结果如下
hello
hello
您还可以通过任务集合使用所有属性。
将以下代码复制并保存到build.gradle
文件中。
task hello
println tasks.hello.name
println tasks['hello'].name
在存储 build.gradle
文件的目录位置执行gradle -q hello
,应该看到输出结果如下
hello
hello
通过路径访问任务
将以下代码复制并保存到build.gradle
文件中。
project(':projectA') {
task hello
}
task hello
println tasks.getByPath('hello').path
println tasks.getByPath(':hello').path
println tasks.getByPath('projectA:hello').path
println tasks.getByPath(':projectA:hello').path
在存储 build.gradle
文件的目录位置执行gradle -q hello
,应该看到输出结果如下
:hello
:hello
:projectA:hello
:projectA:hello
向任务添加描述
可以向任务添加描述。 执行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
文件的目录位置执行gradle -q copy
,应该看到输出结果如下
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
文件的目录位置执行gradle -q myTask
,应该看到输出结果如下 -
I am not affected
以上是关于gradle学习2-任务的主要内容,如果未能解决你的问题,请参考以下文章
如何解决“异常:Gradle 任务 assembleDebug 失败,退出代码 1”?
Android Gradle 插件自定义 Gradle 任务 ⑪ ( Gradle 任务分组 | 为自定义 Gradle 任务指定分组 | 为自定义 Gradle任务指定任务描述 | 代码示例 )