应用概述

CLJ Boot 是一个 Clojure 脚本的远程分发和启动器,其允许动态更新脚本内容和其依赖(比如 JVM、Clojure Library、第三方类库,Firefox 浏览器,WebDriver 等二进制依赖),从而提高应用分发效率。

这个工具来自于一个常见需求:面向客户分发的本地 Clojure 程序,如何更高效的更新?

下面是 CLJ Boot 的典型使用案例,只需要将 key 文件(包含一段加密的 Base64 编码的字符串)和 CLJ Boot 程序打包发给客户,之后客户只需要点击 CLJ Boot 程序,即可自动获取脚本和相关依赖,并开始执行代码。

内部实现

key 文件中包含了一个加密的 URL,CLJ Boot 从此 URL 获取并下载脚本代码,之后检查此脚本同目录 deps.json 依赖描述文件中是否存在其他依赖,比如 JRE、Firefox、WebDriver 等通用二进制文件和 Runtime.jar 这种包含了所有类库依赖的启动文件,之后执行 java -cp ./* -jar runtime.jar SCRIPT_HERE 命令来运行程序。

随后再次运行 CLJ Boot 程序时,亦会重新下载脚本和依赖描述文件,其中此依赖描述文件中包含了所有依赖的 SHA256 哈希值,CLJ Boot 会逐个校验,当匹配时直接使用本地缓存,而不重复下载。

CLJ Boot 程序可任意重命名,其遵循一定的规则:当名字为 xxx.clj.exe,则启动时会忽略 URL 目标下的脚本,而将其替换为同目录下的 xxx.clj 脚本文件。

CLJ Boot 包含 Dart 和 Rust 版本实现,其功能一致,其中 Rust 版本高度优化的二进制文件更小,使用体验更好。

这些设计使得 CLJ Boot 程序可以作为本地 Clojure 程序的启动器,只需要给客户提供 key 文件和一堆 xxx.clj.exe 作为各个功能的入口,之后更新依赖和代码就无需重新分发应用程序,能够实现应用使用管控以及热更新修复代码,甚至能随意更新依赖的类库、二进制包和 JVM,极大的提高了发版效率。

有类似需求?联系微信 CorkineMa免费获取建议和报价折扣。