1 Star 0 Fork 15

夜辰 / java-hot-reload-agent

forked from 铁匠 / java-hot-reload-agent 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

java-hot-reload-agent

java 热更新插件,无需重启 java 进程实现代码更新,提高开发效率,节约时间去陪女朋友!

功能模块

  • hot-reload-core: 核心处理逻辑,编译&加载 class
  • hot-reload-agent: javaagent 入口
  • hot-reload-watcher: 监听本地 java 和 class 文件变化,实现本地进程热更新
  • hot-reload-server: api server,提供接口实现加载远程 jvm 进程

架构

安装&使用

下载&安装(也可以用自行编译)

version="1.0.1-beta"
# 从 github 下载
wget https://github.com/fengjx/java-hot-reload-agent/releases/download/hot-reload-agent-all-${version}/hot-reload-agent-bin.zip
# 解压都任意目录
unzip hot-reload-agent-bin.zip -d hot-reload-agent

本地模式

# 启动
cd hot-reload-agent
sh boot.sh watcher $pid $path1,$path2
  • pid: java 进程 id
  • path: 监听的文件根目录,支持监听 .class.java 文件,多个目录用,分隔

watcher 启动后,可以输入指令完成相关操作,输入 h 查看帮助

[INFO] input command
h
[INFO] r : 重新加载变更的 Class
[INFO] exit : 退出进程
[INFO] h,help,? : 使用帮助

r

重新加载所有变更

exit

退出进程

h,help,?

帮助说明

server 模式

开发中

编译打包

环境依赖

  • jdk 1.8+
  • maven
# mac or linux
make package
# windows
mvn --settings=${maven_settings} clean package -Dmaven.test.skip=true -P full

打包完成后的文件保存在 packaging/target/hot-reload-agent-bin.zip,可以移动到任意目录,解压即可

测试覆盖情况

操作系统 jdk 版本 说明
MacOS 12.0.1 openjdk 1.8 -

精力有限,其他未覆盖平台自行测试,如果你已测试过,欢迎联系补充

基本原理

  1. watcher 监听本地文件变更(.class & .java)并缓存变更文件路径
  2. 将变更文件上传到 server 并保存在临时目录(本地模式忽略次步骤)
  3. 通过 javaagent 技术 attach 到 jvm 进程,拿到Instrumentation对象
  4. 使用自定义类加载器(与业务代码隔离)加载 hot-reload-core 编译 java 文件(如有)
  5. 读取 class 文件字节码,通过instrumentation.redefineClasses()方法重新定义并加载 class

todo list

https://github.com/fengjx/java-hot-reload-agent/issues?q=is%3Aopen+is%3Aissue

参考项目

MIT License Copyright (c) 2021 ws-小铁匠 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

java 热更新工具,无需重启 java 进程实现代码更新 展开 收起
Java
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/Annlody/java-hot-reload-agent.git
git@gitee.com:Annlody/java-hot-reload-agent.git
Annlody
java-hot-reload-agent
java-hot-reload-agent
master

搜索帮助