V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
linyimin520812
V2EX  ›  分享创造

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

  •  
  •   linyimin520812 · 2023-10-07 09:20:19 +08:00 · 2246 次点击
    这是一个创建于 415 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目地址

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

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

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

    效果如下:

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

    3 条回复    2023-10-08 10:27:34 +08:00
    trimleo
        1
    trimleo  
       2023-10-07 23:48:06 +08:00   ❤️ 1
    哈哈 提 issue 的人前来支持下,cli 工具很方便,另外项目也已经用上了 startup 分析了,很棒 https://raw.githubusercontent.com/guozhigq/emoji_storage/main/coolapk/coolapk_emotion_3_ciya.png
    biubiuGolang
        2
    biubiuGolang  
       2023-10-08 09:52:29 +08:00
    @linyimin520812 jdk 17 以上的怎么.. dcvem 还不支持高版本
    linyimin520812
        3
    linyimin520812  
    OP
       2023-10-08 10:27:34 +08:00
    @biubiuGolang 这个就得需要自己集成 hotswapagent 了

    http://hotswapagent.org/mydoc_quickstart-jdk17.html
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1053 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:02 · PVG 04:02 · LAX 12:02 · JFK 15:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.