Liubsyy / HotSecondsIDEA

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

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

Closed YuanEr2 closed 1 year ago

YuanEr2 commented 1 year ago

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

YuanEr2 commented 1 year ago

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

Liubsyy commented 1 year ago

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

Liubsyy commented 1 year ago

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

YuanEr2 commented 1 year ago

下载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

YuanEr2 commented 1 year ago

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

Liubsyy commented 1 year ago

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

YuanEr2 commented 1 year ago

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

Liubsyy commented 1 year ago

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

Liubsyy commented 1 year ago

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

YuanEr2 commented 1 year ago

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

Liubsyy commented 1 year ago

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

Liubsyy commented 1 year ago

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