码迷,mamicode.com
首页 > 其他好文 > 详细

Gradle源码入门四

时间:2015-01-02 18:48:56      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:源码   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);
        }

堆栈如下图


技术分享

Gradle源码入门四

标签:源码   gradle   

原文地址:http://blog.csdn.net/cleverwyq/article/details/42341529

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!