Gradle源码分析(六)

1. 写在前面

在 Gradle源码分析(五)一文中,我们分析了Gradle构建流程的 RunTasks 阶段,这里将分析 Finished 阶段(gradle 源码版本为 5.6.4)。

2. Finished

2.1 整体实现

这里我整理了 Finished 阶段的一些主要操作,并绘制了调用链的时序图。如果对源码不感兴趣的同学只需要看这一部分的内容即可。

2.1.1 时序图

Finished时序图.png

2.1.2 主要操作

Finished 阶段 Gradle 主要做了下面这些事情。

  1. 调用 BuildListener 的 buildFinished()。

2.2 源码分析

2.2.1 调用 BuildListener 的 buildFinished()

Finished 过程发生在 DefaultGradleLauncher 的 finishBuild(),来看看其源码。

public void finishBuild() {
    if (stage != null) {
        finishBuild(stage.getDisplayName(), null);
    }
}

private void finishBuild(String action, @Nullable Throwable stageFailure) {
    if (stage == Stage.Finished) {
        return;
    }

    RuntimeException reportableFailure = stageFailure == null ? null : exceptionAnalyser.transform(stageFailure);
    BuildResult buildResult = new BuildResult(action, gradle, reportableFailure);
    List<Throwable> failures = new ArrayList<Throwable>();
    includedBuildControllers.finishBuild(failures);
    try {
        buildListener.buildFinished(buildResult);
    } catch (Throwable t) {
        failures.add(t);
    }
    stage = Stage.Finished;
    // 处理异常
    if (failures.isEmpty() && reportableFailure != null) {
        throw reportableFailure;
    }
    if (!failures.isEmpty()) {
        if (stageFailure instanceof MultipleBuildFailures) {
            failures.addAll(0, ((MultipleBuildFailures) stageFailure).getCauses());
        } else if (stageFailure != null) {
            failures.add(0, stageFailure);
        }
        throw exceptionAnalyser.transform(new MultipleBuildFailures(failures));
    }
}

这里首先会调用 BuildListener 的 buildFinished(),然后将 Gradle 状态设置为 Finished,并处理异常信息。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容