上周一位同事完成了Web应用开发的热部署实现,主要用于web应用程序的开发调试阶段,免去了开发人员每次修改都要从新部署应用的麻烦。今天研究了一下热部署实现的源代码,感觉,思路清晰,实现原理简单,非常值得学习!
主要分两个部分实现:
1. eclipse插件客户端。提供针对IJavaProject类型的右键菜单Action来对eclipse工程进行debug,run,compile操作,本质实现基于eclipse的debug功能,把选中的project动态的部署到tomcat的maven插件中(经过扩展)
2. tomcat maven插件扩展,添加热部署功能,继承了org.codehaus.mojo.tomcat.RunMojo类,主要就是在调用对应Mojo类execute中,把之前运行态下的class和jar包删掉,从而使得class和jar包可以获得更新的机会(有点被动),这样运行时总是被修改过的类和jar包了。
由于其中涉及到的技术自己也不是很了解,可能有理解错误的地方,但大体的思路应该是这样,有时间可以更深一步了解相关涉及到的技术!
主要技术:
1. eclipse debug框架
2. maven tomcat plugin以及扩展机制
3. classworlds.jar包的使用(好像是对classloader的增强?线下在好好了解一下)