Eclipse Oxygen(4.7)与Java 9插件兼容性问题及优化方案咨询
问题概述
在将一款Eclipse 3.x插件升级以适配Java 9后,我们遇到了一个棘手问题:当生成插件更新站点并通过Eclipse Oxygen的内置更新功能安装新版本时,会弹出错误提示:
移除ID为'pluginxxx.bla.bla'、描述为'bla bla'的部件描述符,其指向无效类'bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView'
更麻烦的是,这个错误不仅由我们的自定义插件触发,Eclipse Oxygen自带的部分捆绑插件也会出现同样问题。另外还有一个矛盾点:右键项目选择Run as 'Eclipse Application'时插件能正常运行,但通过Update Site安装就会加载失败。
初期临时手动方案(仅适用于少量机器)
经过一周的排查,我们先找到了一个手动解决办法,但仅适合个别机器调试:
- 卸载目标插件
- 删除Eclipse安装目录下
plugins文件夹中的旧版本插件文件 - 将插件导出为可部署插件,复制到
plugins目录 - 重启Eclipse
不过这个方案显然不适合批量部署——我们的插件服务于近500名计算机专业学生及200台实验室电脑,必须通过常规Eclipse更新功能完成安装,而非手动复制JAR包。
适配批量部署的临时Workaround
在问题出现7天后,我们找到了更适合批量推送的解决方案,只需调整插件导出向导的设置:
- 导出功能项目时,将目标目录设置为插件更新站点项目文件夹
- 勾选以下导出选项:
Package as individual JAR archievesGenerate p2 repositoryAllow for binary cycles in target platformUse class files compiled in the workspace
- 为确保安装/更新时分类列表显示正常,在更新站点项目中添加
category.xml文件(创建路径:File/New/Other/Plugin-in Development/Category Definition),定义分类并添加版本为qualifier的功能
调整这些设置后,从本地或远程更新站点安装/更新插件时,CompatibilityView的问题就可以解决了。
现状说明
目前这个方案虽然能解决问题,但并非理想的长期解决方案。我们测试发现,即使在Eclipse Photon集成版本中,该问题仍然存在,期待后续Eclipse官方版本能修复这个底层兼容性问题。
内容的提问来源于stack exchange,提问作者muratozyurt

