个人主页:金鳞踏雨
个人简介:大家好,我是金鳞,一个初出茅庐的Java小白
目前状况:22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作
我的博客:这里是CSDN,是我学习技术,总结知识的地方。希望和各位大佬交流,共同进步 ~
Gradle 是个程序、Groovy 是特定领域 DSL 语言。
- Gradle 是运行在 JVM 实例上的一个程序,内部使用 Groovy 语言。
- Groovy 是一种 JVM 上的脚本语言,基于 java 扩展的动态语言。
Gradle 会把 .gradle 的 Groovy 脚本编译成 .class java字节码文件在 JVM 上运行,最终还是 java 来运行。
Grade的目录结构
打开 Gradle 文件目录,核心的 bin 文件就一个 gradle 脚本,这个脚本就是 Gradle 核心执行逻辑了,他 会启动一个 JVM 实例去加载 lib 中的各种函数去构建项目:
Gradle 使用到的JVM进程
Gradle 构建工具在不同场景下会分别使用3个 JVM 进程:
- client
- Daemon
- wrapper
一、client 进程
client 进程是个轻量级进程,每次构建开始都会创建这个进程,构建结束会销毁这个进程。
client 进程的任务:查找并和 Daemon 进程通信
(1)Daemon 进程没启动,client 进程会启动一个新的 Daemon 进程
(2)Daemon 进程已经存在了,client 进程就给 Daemon 进程传递本次构建相关的参数和任务,然后,接收 Daemon 进程发送过来的日志
像 gradle.properties 里面设置的参数、全局 init.gradle 初始化脚本的任务,这些都需要 client 进程 传递给 Daemon 进程。
二、Daemon 进程
Daemon 进程负责具体的构建任务。
我们使用 Android Studio 打包 APK 这依靠的不是 Android Studio 这个 IDEA 开发工具,而是 Gradle 构建工具自己启动的、专门的一个负责构建任务的进程:Daemon。
Daemon 进程 是一个守护进程,构建结束 Daemon 进程也不会销毁,而是会休眠, 等待下一次构建,这样做是为了节省系统资源,加快构建速度,Daemon 进程会缓存插件、依赖等资源。
注意:每一个 Gradle 版本都会对应一个 Daemon 进程,机器内若是运行过多个版本的 Gradle,那么机器内就会存在多个 Daemon 进程
Daemon 进程在以下情况时会失效,需要启动新的 Daemon 进程,判断 Daemon 进程是否符合要求是上面说 的 client 进程的任务:
- 修改 JVM 配置会造成启动新的构建进程
- Gradle 将杀死任何闲置了3小时或更长时间的守护程序
- 一些环境变量的变化,如语言、keystore、keyStorePassword、keyStoreType 这些变化都会造成旧有的守护进程失效
即便是同一个版本的 Gradle,也会因为 VM 配置不同而存在多个相同 Gradle 版本的 Daemon 进程。比如同时启动好几个项目,项目之间使用的 Gradle 版本相同,但是 VM 使用的不同配置。
三、wrapper 进程
wrapper 进程啥也不干,不参与项目构建,唯一任务就是负责下载管理 Gradle 版本。
我们导入 Gradle 项目进来,client 进程发现所需版本的 Gradle 本机没有,那么就会启动 wrapper 进程,根据 gradle.properties 里面的参数自行去 gradle-wrapper.jar 里面的下载程序去下载 Gradle 文件,完事wrapper 进程会关闭。
文章到这里就结束了,如果有什么疑问的地方,可以在评论区指出~
希望能和大佬们一起努力,诸君顶峰相见
再次感谢各位小伙伴儿们的支持!!!