gradle-5-运行&结束篇
gradle-5 运行&尾篇
运行篇
上篇已经说到有向任务图已经构建完毕,接下来就是对任务进行执行了
入口

调用链路
// DefaultGradleLauncher.java
private void runWork() {
if (stage != Stage.TaskGraph) {
throw new IllegalStateException("Cannot execute tasks: current stage = " + stage);
}
List<Throwable> taskFailures = new ArrayList<>();
buildExecuter.execute(gradle, taskFailures);
if (!taskFailures.isEmpty()) {
throw new MultipleBuildFailures(taskFailures);
}
stage = Stage.RunTasks;
}
buildExecuter对象来源于下图的方法调用,调用层级是由外到内,层层递进关系

BuildOperationFiringBuildWorkerExecutor、DeprecateUndefinedBuildWorkExecutor、IncludedBuildLifecycleBuildWorkExecutor基本都是转发,无决定意义,直接跳过,直接到DefaultBuildWorkExecutor

最终还是依次执行executionActions容器对象,上面可以看到构造器传入了二个action,只要分析它就好了
二个action
执行taskGraph中的task前会执行二个action
DryRunBuildExecutionAction
针对dry-run特殊处理,主要就是一些打印输出
/**
* A {@link org.gradle.execution.BuildExecutionAction} that disables all selected tasks before they are executed.
*/
public class DryRunBuildExecutionAction implements BuildExecutionAction {
private final StyledTextOutputFactory textOutputFactory;
public DryRunBuildExecutionAction(StyledTextOutputFactory textOutputFactory) {
this.textOutputFactory = textOutputFactory;
}
@Override
public void execute(BuildExecutionContext context, Collection<? super Throwable> taskFailures) {
GradleInternal gradle = context.getGradle();
if (gradle.
gradle-5 执行过程详解

这篇博客详细解析了gradle-5的运行过程,从任务执行的入口、调用链路,到DryRunBuildExecutionAction和SelectedTaskExecutionAction的分析,再到run taskGraph时的各种任务执行器的作用。最后,文中还介绍了尾篇部分,涉及任务执行结束阶段的资源清理和buildFinished生命周期方法的触发。
最低0.47元/天 解锁文章
69

被折叠的 条评论
为什么被折叠?



