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模块

image-20211217095118494

入口如下

// 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件事件

  1. cr
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回答: 在Gradle中打包Spring Boot项目可以使用bootJar任务。bootJar是Spring Boot的打包任务,它可以将项目打包成可执行的jar文件,其中包含了所有的依赖。你可以使用finalizedBy("bootJar")来在最后调用bootJar任务,实现打包功能。如果要打包成war包,可以调用bootWar任务。具体的使用方法可以参考官方文档或者参考一些网上的教程,例如这文章:https://blog.csdn.net/stupid56862/article/details/86363292。另外,在打包war包的时候需要额外的配置依赖和添加插件。在dependencies中添加依赖implementation 'org.springframework.boot:spring-boot-starter-web'和providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat',然后在插件中应用war插件apply plugin: 'war'即可。这样就可以通过java -jar命令来启动打包好的可执行war包,或者将其部署到服务器(如Tomcat)中。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Gradle配置SpringBoot多环境打包](https://blog.csdn.net/jaune161/article/details/123115172)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Spring Boot - Gradle 打包](https://blog.csdn.net/jim_LoveQ/article/details/93209459)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值