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