我一般在idea社区版中使用maven命令tomcat7:run来启动项目,但是使用中发现class文件居然不能热加载,而在eclipse里面都是可以的。当然如果你使用的是收费版的idea就不用往下看了,收费版提供了tomcat插件,支持热加载。
于是研究了下idea的热加载为啥不生效,搜了一些资料,最后都指向idea的官方文档:
https://www.jetbrains.com/help/idea/2017.3/reloading-classes.html.
https://www.jetbrains.com/help/idea/2017.3/hotswap.html.
文档里可以看到idea其实提供了热加载的配置,但是为啥不生效呢?
我想了想,idea应该是提供了两个操作:build操作和reload class操作。我们希望的是build操作后自动执行reload操作。idea有这个编译后热加载的配置:setting-build-debugger-hot swap-reload classes after compilation,但是在设置了自动编译时:setting-Build-Compiler-Build project automatically,热加载触发不生效(手动点击build是能触发reload生效的)。idea还有执行reload class操作时提前执行build操作的设置:setting-build-debugger-hot swap-build project before reloading classes。
总结一下:我们可以build后置触发热加载reload操作,也可以reload操作前置触发build操作,但是前提是不能开启自动编译,如果开了自动编译,热加载不会触发。原因嘛,可能是idea的缺陷,也可能是idea觉得这样更好。
目前我也觉得这样挺好的,以前eclipse自动编译,导致开发中,功能就几乎不能使用了。现在用idea可以一直开发,开发的同时不会影响其他人使用我本机的接口,联调效率更高了(因为是手动控制什么时候reload)。