Liubsyy / HotSecondsIDEA

HotSeconds是一款Java远程热部署的插件,可实现秒级一键化热更新。插件分为HotSecondsClient(IDEA热部署插件)和HotSecondsServer(服务端javaagent热更新插件),可以热更新java和常用配置文件,也支持常用框架(Spring,MyBatis)的热更新,相对传统部署可节省大量时间提高开发效率。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

下面是我本地部署的流程,但是提示报错异常

YuanEr2 opened this issue · comments

1.去dcevm 找到你的JDK版本的jar包(支持macOS, Linux and Windows),下载下来后运行jar(可能需要管理员权限或者root权限)安装,选择Install DCEVM as altjvm
image

2.将本安装包HotSecondsServer.zip解压后,放到你的工程根目录
image

3.将hot-seconds-remote.xml复制到代码的resource目录,根据需要修改secret和classloader等配置
第一步:
image

第二步:
image

第三步:
image

第四步:
image

4.添加jvm参数开启热部署代理
-XXaltjvm=dcevm -javaagent:$path1/HotSecondsServer.jar=hotconf=$path2/hot-seconds-remote.xml
其中$path1是第2步上传的目录,$path2是第3步上传的目录
第一步:
image

第二步:
image

异常信息:
image

当我把Jvm参数改为:
-XXaltjvm=dcevm -javaagent:HotSecondsServer-beat4.HotSecondsServer.jar=hotconf=com.parent.modules.hot-seconds-remote.xml
报错异常更改为:
image

最近有好几个小伙伴反馈windows上缺失依赖库,我把所有的静态依赖都打包到了boot.dll了,发布了HotSecondsServer-beat5版本,你下载这个版本试一下应该就没问题了

你的操作没有什么问题,就按最开始的配置就行

下载HotSecondsServer-beat5版本后,我按照最开始的配置部署,存在下面新的问题
1.Jvm参数设置为时:
-XXaltjvm=dcevm -javaagent:HotSecondsServer-beat5/HotSecondsServer.jar=hotconf=com/parent/modules/hot-seconds-remote.xml
image

2.Jvm参数设置为时:
-XXaltjvm=dcevm -javaagent:HotSecondsServer-beat5.HotSecondsServer.jar=hotconf=com.parent.modules.hot-seconds-remote.xml
image

而且当我在Windows使用cmd测试时也显示没有主属性清单
image

hotconf填的是hot-seconds-remote.xml的路径,不是相对src的路径也不是包名,写绝对路径也可以的,其实hot-seconds-remote.xml随便放哪里都无所谓,只需要hotconf配置上路径就行

下载HotSecondsServer-beat5版本后,我按照最开始的配置部署,存在下面新的问题 1.Jvm参数设置为时: -XXaltjvm=dcevm -javaagent:HotSecondsServer-beat5/HotSecondsServer.jar=hotconf=com/parent/modules/hot-seconds-remote.xml image

2.Jvm参数设置为时: -XXaltjvm=dcevm -javaagent:HotSecondsServer-beat5.HotSecondsServer.jar=hotconf=com.parent.modules.hot-seconds-remote.xml image

现在项目可以启动了,但是热部署时出现编译失败
image

本地热部署就不要用Remote compillation and hotswap了 ,你直接用Hotswap this file 这个功能就行

另外本地的main函数启动的SpringBoot项目是AppClassLoader,不是LaunchedURLClassLoader,一切以Github文档上的为主

springBoot项目没有问题,现在出问题的是springBootCloud项目,使用了gateway,nacos,mybtis-plus等技术栈

这个报错就是hot-seconds-remote.xml填的classloader未找到,所以报空指针异常,你可以在你要热加载的类上面断点调试一下,用getClass().getClassLoader()看看classloader是哪个,然后填到hot-seconds-remote.xml里,因为热加载某个类是由classloader+classname才能确定唯一的一个class,所有的class热更新都需要这个classloader.

之所以需要手动填classloader而不是插件自动扫描的原因是,把依赖框架和容器的依赖classloader剥夺出来,无论什么容器都能热部署