我正在看Mainak Mitra撰写的Mastering Gradle的Gradle构建文件中的自定义任务的简单示例(第70页)。构建脚本为:
println "Working on custom task in build script"
class SampleTask extends DefaultTask {
String systemName = "DefaultMachineName"
String systemGroup = "DefaultSystemGroup"
@TaskAction
def action1() {
println "System Name is "+systemName+" and group is "+systemGroup
}
@TaskAction
def action2() {
println 'Adding multiple actions for refactoring'
}
}
task hello(type: SampleTask)
hello {
systemName='MyDevelopmentMachine'
systemGroup='Development'
}
hello.doFirst {println "Executing first statement "}
hello.doLast {println "Executing last statement "}
Run Code Online (Sandbox Code Playgroud)
如果我使用gradle -q:hello运行构建脚本,则输出为:
Executing first statement
System Name is MyDevelopmentMachine and group is Development
Adding multiple actions for refactoring
Executing last statement
Run Code Online (Sandbox Code Playgroud)
如预期的那样,首先执行doFirst方法,两个自定义动作将按照定义它们的顺序执行,然后执行doLast动作。如果我注释掉添加doFirst和doLast操作的行,则输出为:
Adding multiple actions for refactoring
System Name is MyDevelopmentMachine and group is Development
Run Code Online (Sandbox Code Playgroud)
现在,自定义动作以与定义它们相反的顺序执行。我不知道为什么。
我认为这只是排序不确定的一种情况,根据您进一步配置任务的方式,您会得到不同的结果。
但是,为什么您需要 2 个单独的 @TaskAction 方法,而不是一个以确定性顺序调用方法的方法?我想不出这样做有什么特别的好处(我意识到它来自书中给出的样本)。我发现的大多数其他样本只有一种方法
@TaskAction
void execute() {...}
Run Code Online (Sandbox Code Playgroud)
我认为这更有意义,也更容易预测。
| 归档时间: |
|
| 查看次数: |
897 次 |
| 最近记录: |