Gradle基础知识-Wrapper,Daeman;Groovy闭包语法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gradle基础知识-Wrapper,Daeman;Groovy闭包语法相关的知识,希望对你有一定的参考价值。

gradle descirbe:

gradle本质就是一个bin脚本,分为window和unix。

启动gradle:启动jvm加载lib所需的库

gradle wrapper

输入gradle wrapper命令会在当前目录创建安装一个jar包(用于下载真正的gradle descirbe,jar很小)和脚本:

gradleUserHome

缓存不同版本的Gradle的缓存文件

gradle doman:

Maven构建流程:

启动JVM然后执行加载jar包任务执行完任务完之后就销毁掉,下次再次构建的话还是一样的流程,由于JVM被销毁掉了,需要重新加载启动JVM然后重新加载jar包。所以速度很慢

gradle构建的做法:

启动一个client 的JVM(很小,因为只是做一个请求中转接受数据结果操作)然后client启动一个daemon JVM,DomanJVM加载jar包然后接受client JVM的请求做处理,处理完成后告知client JVM结果及日志; 当执行完成之后clie ntJVM 会被销毁。

构建的时候可以指定--no-daemon参数,那么这个daemon每次构建完就会和maven一样销毁。(gradle3.0之前需要使用这个参数,现在已经很稳定了不需要这个参数了)

daemon进程

通过命令查看启动的daemon进程 : gradle --status查找运行的daemon进程

Daemon什么时候会失效需要重新启动

  • 修改 JVM 配置这回造成启动新的构建进程
  • Gradle 将杀死任何闲置了3小时或更长时间的守护程序
  • 一些环境变量的变化,如语言、keystore、keyStorePassword、keyStoreType 这些变化都会造成旧有的守护进程失效

完整流程:

  • 使用gradlew 启动一个gradle Task:启动一个轻量JVM。查找是否安装有对应版本的gradle,如果没有就启动wrapper进程先去下载(会下载到gradle userhome中),有就是下一步
  • 查找gradle对应版本并且和当前构建所要求的相关的参数所兼容的daemon JVM进程,如果没有找到就启动daemon JVM,如果找到就连接(使用socket)daemon

gradle daemon stared:第一次启动daemon

  • 将当前任务和所需的上下文(当前环境变量等)给到daemon执行

groovy语法介绍

动态调用

默认Goovy是动态调用,如果加上@CommonStatic注解的话那么这段代码会像java一样进行静态编译并进行静态检查

构造方法及方法调用

Groovy的类会对其内部的所有全局变量生成一个map注入到构造方法中。

java方法的调用字节码是invokednamic,但是Groovy调用方法是通过MOP反射:创建出对象后调用invokeMethod调用

闭包

闭包是groovy的核心。

最后一个语句是返回值,使用内部来定义方法。

声明闭包:def closure=it+1 闭包就可以理解为方法,闭包可作为参数传递

调用闭包:print(closure(2)),和普通方法调用一样(可以将括号省略掉:方法名 空格 参数调用闭包);闭包是最后一个参数时,可以不在括号里面提取到外面

plugins 
    id com.android.application version 7.2.0 apply false

等价于

    plugins( 
        id (com.android.application). version (7.2.0). apply( false)
    )

可以看到是调用plugins方法,这个方法的参数是一个闭包因此可以省略掉括号提取到外面;参数类型可以不用往()里面写,方法的调用也是通过空格分割开。

PluginDependencySpec id(String var1); 调用id传入string返回PluginDependencySpec 类

version返回的这个类又有两个方法再次调用,也就是上面说的:

version "" apply false

以上是关于Gradle基础知识-Wrapper,Daeman;Groovy闭包语法的主要内容,如果未能解决你的问题,请参考以下文章

Android Gradle 插件Gradle 基础配置 ⑤ ( gradle-wrapper.properties 配置分析 | GRADLE_USER_HOME 目录 )

Android Gradle 插件Gradle 基础配置 ④ ( Gradle Wrapper 配置作用 | Gradle 下载的依赖库存放位置 )

gradle wrapper, gradle ,gradle plugin 之间的关系

Chapter 5. The Gradle Wrapper 关于gradle wrapper

2018-06-26 IDEA 如何升级gradle wrapper

Gradle Wrapper