由于Eclipse使用OSGi来处理模块和包,因此应该能够对它们进行热部署,为什么它建议在安装插件后重新启动“以使更改生效”?
Eclipse是否受到了一些OSGi的限制,或者它的体系结构是这样的,即使是热部署,它也不能保证部署顺利进行,从而通过提供重新启动来选择最安全的路径吗?
发布于 2012-10-11 07:42:55
不幸的事实是,一旦您有足够的互联模块,几乎不可能证明,所有的引用,您希望卸载将删除在任何情况下。许多库,甚至核心JDK类都会长时间甚至永远地保存对对象或类的引用,即使是一个偏离的引用也会阻止加载模块的ClassLoader被垃圾收集。
这样的问题很难解决,很难自动检测,而且很容易重新引入。
这个问题也是由于WARs重新部署到servlet容器(如Jetty或Tomcat )而引起的。
许多开发人员选择更实用的方法,花时间开发新特性和修复bug,而不是确保代码的热加载和卸载工作100%正确。因此,Eclipse建议您在重新配置插件时重新启动,因为它不能保证您下载的所有插件都能正确加载或卸载。
发布于 2012-11-27 16:40:05
Eclipse平台不需要重新启动就支持动态安装插件。在过去,这个选项是通过“立即应用”选项提供的。不幸的是,要使其正常工作,插件本身也需要支持动态行为。大多数Eclipse插件本身并不是动态的--它们不会自己清理,也不会在启动后对添加/删除的服务或扩展做出动态反应。因此,“立即申请”按钮有时被戏称为“我感到幸运”按钮。也许它会起作用,但也许目前安装的一些插件无法处理对系统的动态更改。
最后,安装插件的频率很低,因此重新启动是最干净和最安全的方法。这并不是建筑上的限制.使代码完全动态在任何应用程序框架中都是一项艰巨的工作,许多工具编写人员显然认为这不值得投资。
发布于 2012-10-10 16:51:43
可能是因为它们不能强制包释放服务引用,所以一个包可能有一个服务引用到另一个已经更新或删除的服务引用。这就是为什么他们警告说,不重新启动可能导致不必要的行为。
https://softwareengineering.stackexchange.com/questions/168317
复制相似问题