[求助] Java 快速开发阶段的 auto reload - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
asanelder
V2EX    程序员

[求助] Java 快速开发阶段的 auto reload

  •  
  •   asanelder 2020-12-24 11:26:07 +08:00 2936 次点击
    这是一个创建于 1753 天前的主题,其中的信息可能已经有所发展或是发生改变。
    俺现在开发一个项目,前期,需要频繁修改,但每次修改都要重启服务,麻烦。

    俺记得 node 有那种 auto reload 的机制,就是你修改了源代码后,自动更新服务。

    俺想了解一下,java 有没有类似的东西和方法,俺想加快前期迭代速度,
    第 1 条附言    2020-12-24 11:57:18 +08:00
    俺找到一种很方便的方法了。

    第一步:启动服务的时候使用 debug (或 attatch 远程的)

    第二步:本地修改,如修改了 3 个文件

    第三步:idea Build -> Build Project,为了方便可以设置一个快捷键,此时 idea 会重新 compile 并 reload 的有改动的文件,不管是本地启动还是远程 debug 的。

    第四步:done

    以上不需要任何插件,依赖,配置
    21 条回复    2020-12-25 09:36:05 +08:00
    Goooogle
        1
    Goooogle  
       2020-12-24 11:38:54 +08:00
    Intellij 有个 JRebel 插件,基本符合你的需求
    Oktfolio
        2
    Oktfolio  
       2020-12-24 11:41:16 +08:00
    spring-boot-devtools
    tinyuu
        3
    tinyuu  
       2020-12-24 11:41:28 +08:00
    tydl
        4
    tydl  
       2020-12-24 11:45:58 +08:00
    asanelder
        5
    asanelder  
    OP
       2020-12-24 11:56:44 +08:00
    @Goooogle #1
    @Oktfolio #2
    @tinyuu #3
    @tydl #4

    俺找到一种很方便的方法了。

    第一步:启动服务的时候使用 debug (或 attatch 远程的)

    第二步:本地修改,如修改了 3 个文件

    第三步:idea Build -> Build Project,为了方便可以设置一个快捷键,此时 idea 会重新 compile 并 reload 的有改动的文件,不管是本地启动还是远程 debug 的。

    第四步:done

    以上不需要任何插件,依赖,配置
    tydl
        6
    tydl  
       2020-12-24 12:02:18 +08:00
    使用插件就一步,编辑代码,ctrl+s 。
    itechify
        7
    itechify  
    PRO
       2020-12-24 12:16:34 +08:00 via Android
    你甚至不需要任何插件,只需要 Ctrl +Alt +F9
    lff0305
        8
    lff0305  
       2020-12-24 16:59:08 +08:00
    #5 这种 Jdk 自带的 Hot-Reloading 是有限制的,只能 reload 方法体的修改,不能添加删除方法参数,修改参数类型返回类型,不能添加删除 property; 而且在一个 app 里面有时候光 reload 这个 class 是不够的,还要 reload 这个 class 的依赖,调用 @PostConstruct 等等等。所以 Jdk 自己的 Reloading 只能处理很少一部分情况

    要解决这个问题还是需要 JRebel(要钱)或者 DCEVM(开源),他们补充了 Hot-Reloading,能够在修改了方法参数等等的时候 Reload,同时带了插件,能够计算 Reload 这个 class 之后还要做哪些活

    当然有些时候还是有问题,就只能重启

    不过现在 Java 大部分都是 microservice 那一套,启动没几秒钟,不像十年前全是启动好几分钟的重型应用,对 reloading 的需求没有那么强
    asanelder
        9
    asanelder  
    OP
       2020-12-24 17:10:05 +08:00
    @lff0305 #8 感谢铁子细心回复。

    今天俺试了一下 Jdk 的 hot-reloading, 确实功能有限。JRebel 也要钱,而且感觉不太明白原理,所以也不太想用。

    现在还是使用 jenkins 来自动部署了,虽然有些麻烦,忍了。

    spring-devtool 不知为啥,修改源码后要过十几秒才自动重启,感觉也不方便
    AllanAG
        10
    AllanAG  
       2020-12-24 17:30:55 +08:00
    JRebel 插件加上设置 idea 失去窗口焦点自动更新类和资源,写完代码再点击浏览器,源码基本就重新加载好了。关于 JRebel,使用它的启动按钮,它会监听 target 文件夹,文件发生变化就会自动重载修改的代码,现在除了修改配置文件,基本不需要重启项目
    asanelder
        11
    asanelder  
    OP
       2020-12-24 17:37:04 +08:00
    @AllanAG #10 看来这么多铁子推荐,俺要认真看一看了
    Kasumi20
        12
    Kasumi20  
       2020-12-24 17:43:56 +08:00
    对啊,每次重启好麻烦

    https://github.com/develon2015/node-dev-server

    这是我基于 webpack 做的 Node 开发工具,依赖文件被修改就会自动重启,很好用,还支持 electron-main
    guxingke
        13
    guxingke  
       2020-12-24 17:46:28 +08:00
    有些框架是可以自动热更(也可能是自动重启)的, 比如 play , helidon
    不过你用的是 spring , 那只能推荐 jrebel 了。。。
    asanelder
        14
    asanelder  
    OP
       2020-12-24 18:38:33 +08:00
    @guxingke #13 使用了一下,感觉不好使啊,每次修改代码后,要等十几秒才 auto redeploy
    asanelder
        15
    asanelder  
    OP
       2020-12-24 18:45:22 +08:00
    @Kasumi20 #12 铁子,用不到 java 上面啊
    AoEiuV020
        16
    AoEiuV020  
       2020-12-24 18:50:20 +08:00
    比较简单的场景我会直接利用断点取消 suspend 改用 evaluate 加代码改变量来调试,连 reload 都不用,
    就是功能有点弱,只能添加执行代码,
    asanelder
        17
    asanelder  
    OP
       2020-12-24 18:51:34 +08:00
    @AoEiuV020 #16 哎,场景有限,场景有限,看来没有什么太好的方法。
    Amayadream
        18
    Amayadream  
       2020-12-24 23:44:10 +08:00
    @AoEiuV020 #16 我也经常这么干,但是确实是适用场景太少了。
    gba
        19
    gba  
       2020-12-25 08:24:52 +08:00 via Android
    @asanelder 点一下 idea 右上方的小锤子图标就马上更新了
    NoUltimate
        20
    NoUltimate  
       2020-12-25 09:29:38 +08:00
    可以用 jrebel,github 搜一下有激活服务器,自己本地搭建一个然后点击 work offline 就好了
    tinyuu
        21
    tinyuu  
       2020-12-25 09:36:05 +08:00
    推荐 hotswapagent 开源免费啊。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2353 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 15:51 PVG 23:51 LAX 08:51 JFK 11:51
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86