Gradle-2 初始化篇(LoadSetings)
调试
法一:
https://docs.gradle.org/current/userguide/troubleshooting.html
./gradlew taskname -Dorg.gradle.debug=true --no-daemon

法二:
找到GradleRunConfiguration类

这样可以方便gradle源码调试
参考:https://medium.com/dan-on-coding/debugging-gradle-source-code-in-intellij-e1224bec9b6e
入口
DefaultGradleLauncher
public GradleInternal executeTasks() {
doBuildStages(Stage.RunTasks);
return gradle;
}
private void doBuildStages(Stage upTo) {
Preconditions.checkArgument(
upTo != Stage.Finished,
"Stage.Finished is not supported by doBuildStages."
);
try {
if (stage == null && gradle.isRootBuild()) {
buildOptionBuildOperationProgressEventsEmitter.emit(gradle.getStartParameter());
}
if (upTo == Stage.RunTasks && configurationCache.canLoad()) {
doConfigurationCacheBuild();
} else {
doClassicBuildStages(upTo);
}
} catch (Throwable t) {
finishBuild(upTo.getDisplayName(), t);
}
}
private void doClassicBuildStages(Stage upTo) {
if (stage == null) {
configurationCache.prepareForConfiguration();
}
prepareSettings();
if (upTo == Stage.LoadSettings) {
return;
}
prepareProjects();
if (upTo == Stage.Configure) {
return;
}
prepareTaskExecution();
if (upTo == Stage.TaskGraph) {
return;
}
configurationCache.save();
runWork();
}
代码可以看到doClassicBuildStages中调用了prepareSettings方法,该方法就是我们理解的gradle配置阶段,本篇主要来梳理下内部实现流程
private void prepareSettings() {
if (stage == null) {
buildListener.buildStarted(gradle);
settingsPreparer.prepareSettings(gradle);
stage = Stage.LoadSettings;
}
}
配置篇小结:
-
生命接口方法buildStarted调用
首先是触发了buildListener的buildStarted方法(该监听器可以通过grade.addListener来实现)
-
执行初始化脚本
InitScriptHandler.executeScripts
-
寻找并解析setting.gradle文件
-
加载gradle.properties文件
-
解析buildSrc工程文件

本文详细探讨了Gradle初始化过程中的LoadSettings阶段,包括调试方法、入口点和prepareSettings的分析。在prepareSettings阶段,主要涉及设置脚本执行、构建buildSrc工程以及解析settings.gradle文件。通过调用链路解析了DefaultSettingsLoader如何查找并加载settings.gradle,以及加载gradle.properties的过程。最后,文章提到了ScriptEvaluatingSettingsProcessor对settings.gradle采用kotlin脚本插件进行解析。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



