- 下载源码自编译
or下载 release包 - 启动服务端
- 安装idea插件(macaque-plugin)
- idea插件里面设置服务端地址和端口
- 右击Java文件选择服务端进程
目前已知
后续会对以上未实现功能进行逐步优化解决
git clone https://github.com/haiyanghan/macaque-hotswap.git
cd macaque-hotswap
./gradlew macaque-server:release编译后的路径位于 macaque-server/build/distributions/macaque-server-${version}.tar.gz
需要jdk1.8的环境
将打包后的压缩包上传到运行jvm的服务器并解压缩
首先需要修改 runServer 脚本里的 JAVA_HOME
然后执行
chmod +x runServer.sh
sh runServer.sh请尽量使用
root用户进行启动,如果使用其他用户,则可能会出现找不到相应的jvm进程的情况
插件项目地址: macaque-plugin
鉴于目前还没有上idea的插件市场,您可以从release里面下载最新的到本地,从本地进行安装
Idea -> File -> Settings -> Tools -> Macaque
端口在 runServer脚本里面通过
--serverPort=2023进行设置
右击Java文件 -> 选择进程
- 选择进程后会弹出选择框,选择编译选项
Rebuild project重新编译整个项目recompile增量编译所属模块Use Compiled使用编译好的
- 编译完成后,通过确认框再次确认
待补充
| 功能描述 | 开发状态 | |
|---|---|---|
| 兼容模式 | 兼容模式 | × |
| 版本链 | 版本链 | × |
| class文件对比 | class文件对比 | × |
| 功能描述 | 开发状态 | |
|---|---|---|
| 多文件选择 | 一次替换多个文件 | × |
| 多服务端设置 | 配置多个服务端 | √ |
| 无服务端模式 | 服务端地址为本地的话, 不需要运行服务端就可以进行热替换 | √ |
| 进程过滤 | 指定表达式过滤服务端的进程 | √ |
| 增强Local模式 | 本地模式下修改Java文件自动热部署 | × |
| 功能描述 | 开发状态 | |
|---|---|---|
| springboot-starter | 通过引入依赖, 使用springweb的方式来代替server端进程 | × |
项目依赖 Instrumentation Api中的 redefineClasses和retransformClasses方法,
这两个方法都限制了新的class相比旧的class不能有新增的方法和新增的字段,
兼容模式下会对需要替换的class对象加工增强,间接的实现新增方法和新增字段,
这样会导致加工后的class和原本预期的class字节码不一致等
每次热替换都会以class为单位生成一个版本号, 可以在插件里面选择指定的版本进行回滚
本地可以选择和服务端的某个进程中正在运行的class(可以基于版本链)进行对比, 对比的粒度可以是字节码或者是反编译后的Java文件
QQ群: 904726708
本人个人精力有限,欢迎对该项目感兴趣的小伙伴来贡献代码,贡献范围包括但不限于:
- 修复bug
- 代码优化
- 新的功能
- 补充注释
- 补充文档
两种贡献方法:
- 提交
pull request - 成为仓库成员


