Gradle源码入门四

接三

如果我们运行gradle hello  (hello 是一个task)

 代码会走到org.gradle.launcher.cli.RunBuildAction,  这个类的run()函数

    public void run() {
        executer.execute(
                new ExecuteBuildAction(startParameter),
                new DefaultBuildCancellationToken(),
                new DefaultBuildActionParameters(clientMetaData, startTime, systemProperties, envVariables, currentDir, startParameter.getLogLevel()));
    }

executer is an instance of   InProcessBuildActionExecuter

public class ExecuteBuildAction implements BuildAction<Void>

改Action类有自己的run实现

    public Void run(BuildController buildController) {
        buildController.setStartParameter(startParameter);
        buildController.run();
        return null;
    }

run最走到org.gradle.initialization.DefaultGradleLauncher.java

    private BuildResult doBuild(Stage upTo) {
        loggingManager.start();
        buildListener.buildStarted(gradle);
               Throwable failure = null;
        try {
            doBuildStages(upTo);
        } catch (Throwable t) {
            failure = exceptionAnalyser.transform(t);
        }
        BuildResult buildResult = new BuildResult(gradle, failure);
        buildListener.buildFinished(buildResult);

        return buildResult;
    }

这里就接上了第一篇所讲的doBuildStages

        // Evaluate init scripts
        initScriptHandler.executeScripts(gradle);
中,会生成很多文件夹和文件

÷

InitScript/classes 下面是一个emptyScript.txt

no_initscript 下面是一个 .class 文件, 是对一些init settings文件调用Groovy的函数编译出来 的 (in org.gradle.groovy.scripts.internal ->DefaultScriptCompilationHandler.java

        String scriptText = source.getResource().getText();
        String scriptName = source.getClassName();
        GroovyCodeSource codeSource = new GroovyCodeSource(scriptText == null ? "" : scriptText, scriptName, "/groovy/script");
        try {
            groovyClassLoader.parseClass(codeSource, false);
        } catch (MultipleCompilationErrorsException e) {
            wrapCompilationFailure(source, e);
        } catch (CompilationFailedException e) {
            throw new GradleException(String.format("Could not compile %s.", source.getDisplayName()), e);
        }

堆栈如下图



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值