gradle-1启动篇
grade-1 启动流程(v6.9.1)
引子
做为Android开发,不仅需要对Apk构建流程熟悉外,还要知道gradle内部实现,通常说的gradle的生命周期你知道分为哪几个阶段吗?在不同生命周期你知道gradle到底做了什么吗?
本篇开始研究下gradle源码内部基本实现吧,你能从中找到答案,此处以6.9.1版本为分析
先看入口吧,gradlew.bat文件,里面核心代码
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
前三个为空,最终调用的是GradleWrapperMain.main方法
准备
准备gradle源码
git clone https://github.com/gradle/gradle
gcb feature_v6.9.1 v6.9.1
修改com.gradle.enterprise:test-distribution-gradle-plugin:1.1.2-rc-1调整为com.gradle.enterprise:test-distribution-gradle-plugin:1.1.2同步即可
wrapper模块
入口如下
// org.gradle.wrapper.GradleWrapperMain.java
public static void main(String[] args) throws Exception {
// gradle-wrapper.jar
File wrapperJar = wrapperJar();
// load gradle-wrapper.properties file
File propertiesFile = wrapperProperties(wrapperJar);
File rootDir = rootDir(wrapperJar);
CommandLineParser parser = new CommandLineParser();
parser.allowUnknownOptions();
parser.option(GRADLE_USER_HOME_OPTION, GRADLE_USER_HOME_DETAILED_OPTION).hasArgument();
parser.option(GRADLE_QUIET_OPTION, GRADLE_QUIET_DETAILED_OPTION);
SystemPropertiesCommandLineConverter converter = new SystemPropertiesCommandLineConverter();
converter.configure(parser);
ParsedCommandLine options = parser.parse(args);
Properties systemProperties = System.getProperties();
systemProperties.putAll(converter.convert(options, new HashMap<String, String>()));
// gradle home 目录:~/.gradle
File gradleUserHome = gradleUserHome(options);
addSystemProperties(gradleUserHome, rootDir);
Logger logger = logger(options);
// 构建一个wrapper执行器,调用execute;
// 1. 执行安装(如果本地没有安装
WrapperExecutor wrapperExecutor = WrapperExecutor.forWrapperPropertiesFile(propertiesFile);
wrapperExecutor.execute(
args,
new Install(logger, new Download(logger, "gradlew", UNKNOWN_VERSION), new PathAssembler(gradleUserHome)),
new BootstrapMainStarter());
}
// org.gradle.wrapper.WrapperExecutor.java
public void execute(String[] args, Install install, BootstrapMainStarter bootstrapMainStarter) throws Exception {
//
File gradleHome = install.createDist(config);
bootstrapMainStarter.start(args, gradleHome);
}
此处会调用wrapperExecutor.execute方法;主要做了2件事件
- cr