@@ -28,13 +28,13 @@ gradle.afterProject { project ->
28
28
configList. add(" $project 耗时:${ System.currentTimeMillis() - begin} ms" )
29
29
}
30
30
31
- def beginOfProjectExecute
31
+ def beginOfProjectExecute = 0L
32
32
gradle. taskGraph. whenReady {
33
33
println ' ----------------------配置阶段----------------------'
34
34
configList. forEach { configStr ->
35
35
println (configStr)
36
36
}
37
- println ' 配置阶段,总共耗时:' + (System . currentTimeMillis() - beginOfConfig) + ' ms '
37
+ println " 配置阶段,总共耗时:${ (System.currentTimeMillis() - beginOfConfig)} ms "
38
38
println ' ----------------------配置阶段----------------------'
39
39
beginOfProjectExecute = System . currentTimeMillis()
40
40
}
@@ -48,14 +48,20 @@ gradle.taskGraph.beforeTask { task ->
48
48
task. ext. beginOfTask = System . currentTimeMillis()
49
49
}
50
50
task. doLast {
51
- taskList. add(" $task 耗时:${ System.currentTimeMillis() - task.beginOfTask} ms" )
51
+ /**
52
+ * 1、在Gradle中,task实例是通过实现task的实现类来创建的。当在Gradle文件中定义一个task时,Gradle会根据定义的task的名称和类型来创建对应的task实例。
53
+ * 2、对于task实例,Gradle会为其生成一个代理类,这个代理类是task实例的包装类,它实现了所有task的接口,并包含了task的所有属性和方法。这个代理类的名称通常是task的实现类名称加上'_Decorated',例如,如果task的实现类名称为MyTask,那么代理类的名称就是MyTask_Decorated。
54
+ * 3、当在Gradle文件中引用task实例时,实际上是在引用这个代理类,而不是task实现类本身。代理类负责调用task实现类中的方法和属性,并将结果返回给Gradle。这样做的好处是,代理类可以提供一些附加功能,例如缓存task的输出结果或拦截task的方法调用。
55
+ * 因此,当在Gradle文件中使用task.class.name来引用task实现类时,实际上是引用了task的代理类名称,这个代理类包装了task实现类,并提供了额外的功能和接口。
56
+ */
57
+ taskList. add(" $task : ${ task.class.name - '_Decorated'} :耗时${ System.currentTimeMillis() - task.beginOfTask} ms" )
52
58
}
53
59
}
54
60
gradle. buildFinished {
55
61
println ' ----------------------执行阶段----------------------'
56
62
taskList. forEach { taskStr ->
57
63
println (taskStr)
58
64
}
59
- println ' 执行阶段,总耗时:' + ( System . currentTimeMillis() - beginOfProjectExecute) + ' ms '
65
+ println " 执行阶段,总耗时:${ System.currentTimeMillis() - beginOfProjectExecute} ms "
60
66
println ' ----------------------执行阶段----------------------'
61
67
}
0 commit comments