我有一个RCP应用程序,当我将一个新的插件(比如com.XXX.version)复制到我的RCP产品的plugins文件夹中时,在启动产品时,这个新复制的插件被框架加载,它取代了旧的(如果我复制的版本大于现有版本)。
当我正在尝试执行反向过程(即删除新复制的插件并恢复到之前的状态)时RCP应用程序处于运行状态(即应用程序正在使用中)我遇到了问题。问题是应用程序锁定了这些更高版本的插件文件,因为我无法清理(或卸载)这些JAR。
任何解决方法都可以实现这一点,建议将不胜感激! 我想将应用程序恢复到以前的状态。
答案 0 :(得分:0)
您是否尝试在删除之前卸载BundleContext中的插件?
Platform.getBundle("yourBundle").uninstall();
有关uninstall()的详细信息,请参阅JavaDoc
答案 1 :(得分:0)
我找到了我的问题的答案。
我的要求是清理所有已安装的插件,这在JVM处于运行状态期间无法完成(我的意思是在RCP应用程序运行期间)。所以我尝试在JVM退出时删除插件JAR文件(即,在我的RCP退出期间),使用方法java.io.File.deleteOnExit(),它在应用程序退出时清除插件。在下次重新启动时,RCP应用程序将撤消这些插件,因此将其状态恢复到之前的状态。