本文整理自网络,侵删。
Gradle 守护进程
走进守护进程
Gradle 守护进程(有时也称为构建守护进程) 的目的是改善 Gradle 的启动和执行时间。
我们准备了几个守护进程非常有用的用例。对于一些工作流,用户会多次调用 Gradle,以执行少量的相对快速的任务。举个例子:
- 当使用测试驱动开发时,单元测试会被执行多次。
- 当开发一个 web 应用程序中,应用程序会被组装多次。
- 当发现构建能做什么,在 gradle tasks 在哪里会执行多次。
对以上各种工作流来说,让调用 Gradle 的启动成本尽可能小会很重要。
此外,如果可以相对较快地建立 Gradle 模型,用户界面可以提供一些有趣的功能。例如,该守护进程可能用于以下情形:
- 在 IDE 中的内容帮助
- 在 GUI 中的实时可视化构建
- 在 CLI 中的 tab 键完成
一般情况下,构建工具的敏捷行为总是可以派上用场。如果你尝试在你的本地构建中使用守护进程的话,它会变得让你很难回到正常的 Gradle 使用。
Tooling API 在整个过程当中都使用守护进程。如,你无法在没有守护进程时正式地使用 Tooling API。这意味着当您在 Eclipse 中使用 STS Gradle 或在 Intellij IDEA 中使用 Gradle 支持时,您已经在使用 Gradle 守护进程。
未来,该守护进程还会提供更多的功能:
- 敏捷的 up-to-date 检查:使用本地文件系统修改通知(例如,通过 jdk7 nio.2)预先执行 up-to-date 分析。
- 更快的构建: 预评估项目,这样当用户接下来调用 Gradle 时,模型就准备好了。
- 我们提到了更快的构建吗?守护进程可以预先下载依赖项或进行快照依赖的新版本检查。
- 使用可用于编译和测试的一个可复用线程池。例如,Groovy 和 Scala 的编译器启动开销都很大。构建守护进程可以维持一个已下载的 Groovy 和 (或) Scala 进程。
- 预先执行某些任务,比如编译。更快的反馈。
- 快速、 准确的 bash 的 tab 键完成。
- Gradle 缓存的定期垃圾收集。
重用和失效的守护程序
基本的思想是, gradle 命令会 fork 一个守护进程,用于执行实际的构建。Gradle 命令的后续调用将重用该守护进程,以避免启动开销。有时我们不能使用现有的守护进程,是因为它正忙或其 java 版本或 jvm 参数不同。关于 fork 一个完全新的守护进程的具体细节,请阅读下面的专题。守护进程将在空闲3小时后自动失效。
相关阅读 >>
更多相关阅读请进入《Gradle》频道 >>