java 热更新插件,无需重启 java 进程实现代码更新,提高开发效率,节约时间去陪女朋友!
功能模块
- hot-reload-core: 核心处理逻辑,编译&加载 class
- hot-reload-agent: javaagent 入口
- hot-reload-watcher: 监听本地 java 和 class 文件变化,实现本地进程热更新
- hot-reload-server: api server,提供接口实现加载远程 jvm 进程
架构
支持本地模式和远程模式
基本原理
- watcher 监听本地文件变更(.class & .java)并缓存变更文件路径
- 将变更文件上传到 server 并保存在临时目录(本地模式忽略次步骤)
-
通过 javaagent 技术 attach 到 jvm 进程,拿到
Instrumentation
对象 -
使用自定义类加载器(与业务代码隔离)加载
hot-reload-core
编译 java 文件(如有) -
读取 class 文件字节码,通过
instrumentation.redefineClasses()
方法重新定义并加载 class