一个命令实现代码热部署,提高日常开发效率

215 天前
 linyimin520812

项目地址

前段时间因为一个issue接触到了trava-jdk-8-dcevm,其基于 dcevm 并集成了 HotswapAgent ,允许高级热部署,如方法字段添加等等,并了解到了 JDWP 的一个特性,项目以 Debug 形式启动后,重新编译修改的代码文件后会自动进行热加载。

与标准 JDK 不同(只支持方法体内代码修改的热加载),而 trava-jdk-8-dcevm(DCEVM+HotswapAgent)更多场景的热加载(如添加字段、方法等),在结合sdkman进行 JDK 版本管理,日常开发效率可以有很大的提升。

但是因为日常开发中部署分支和开发分支往往不是同一个分支,要想使用此能力,需要一些操作步骤有点繁琐,所以便实现了这个命令行工具,支持一个命令实现代码热加载。原理如下:

效果如下:

趁着这次命令行工具的开发,体验了一下 GraalVM ,虽然享受到了静态编译带来的诸多好处,但也很明显感受到了一些缺陷,比如编译出来的 native 包很大(有 28M 左右),编译成 jar 包只有 3M 左右。同时如果依赖的三方包中使用了反射、动态代理等能力,很容易出问题,而且还是编译成功,运行时错误。如果提供了一些工具的帮助,还是不能 100%的覆盖到所有的反射类型,会有一些边界情况覆盖不到,可能会产生运行时错误。

1970 次点击
所在节点    分享创造
3 条回复
trimleo
215 天前
哈哈 提 issue 的人前来支持下,cli 工具很方便,另外项目也已经用上了 startup 分析了,很棒 https://raw.githubusercontent.com/guozhigq/emoji_storage/main/coolapk/coolapk_emotion_3_ciya.png
biubiuGolang
214 天前
@linyimin520812 jdk 17 以上的怎么.. dcvem 还不支持高版本
linyimin520812
214 天前
@biubiuGolang 这个就得需要自己集成 hotswapagent 了

http://hotswapagent.org/mydoc_quickstart-jdk17.html

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/979348

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX