Gradle源碼分析(六)

1. 寫在前面

Gradle源碼分析(五)一文中,我們分析了Gradle構(gòu)建流程的 RunTasks 階段,這里將分析 Finished 階段(gradle 源碼版本為 5.6.4)。

2. Finished

2.1 整體實現(xiàn)

這里我整理了 Finished 階段的一些主要操作,并繪制了調(diào)用鏈的時序圖。如果對源碼不感興趣的同學(xué)只需要看這一部分的內(nèi)容即可。

2.1.1 時序圖

Finished時序圖.png

2.1.2 主要操作

Finished 階段 Gradle 主要做了下面這些事情。

  1. 調(diào)用 BuildListenerbuildFinished()。

2.2 源碼分析

2.2.1 調(diào)用 BuildListener 的 buildFinished()

Finished 過程發(fā)生在 DefaultGradleLauncherfinishBuild(),來看看其源碼。

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));
    }
}

這里首先會調(diào)用 BuildListenerbuildFinished(),然后將 Gradle 狀態(tài)設(shè)置為 Finished,并處理異常信息。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容