Eclipse 4.23更新后出现LinkageError类加载约束冲突问题求助
错误信息
java.lang.LinkageError: 加载器约束冲突:加载器org.eclipse.osgi.internal.loader.EquinoxClassLoader @5987e932 想要加载接口org.hamcrest.Matcher。此前已由org.eclipse.osgi.internal.loader.EquinoxClassLoader @5aa6202e 加载了同名的不同接口。(org.hamcrest.Matcher位于加载器org.eclipse.osgi.internal.loader.EquinoxClassLoader @5aa6202e 的未命名模块中,父加载器为'platform')
问题原因
更新Eclipse并添加composite/orbit仓库后,引入了与现有环境版本不一致的Hamcrest包,导致不同Equinox类加载器加载了org.hamcrest.Matcher接口的不同版本,触发类加载约束冲突。
解决方案
清理Eclipse工作区缓存
关闭Eclipse,删除工作区目录下的.metadata文件夹(建议先备份该目录内的重要配置),重启Eclipse后会自动重建缓存配置。统一Hamcrest包版本
- 打开
Help > Install New Software,点击What is already installed?,查看已安装的Hamcrest相关插件版本。 - 进入
Window > Preferences > Plug-in Development > Target Platform,检查当前目标平台中的Hamcrest版本,移除冲突的包,替换为与已安装版本一致的组件。 - 检查新增的composite/orbit仓库,若其中的Hamcrest版本与现有环境冲突,暂时禁用该仓库,或在安装插件时排除Hamcrest相关模块。
- 打开
临时调整类加载器策略
在启动配置(Run > Run Configurations/Debug Configurations)的Arguments标签页中,为VM参数添加:-Dosgi.classloader.shared.parents=ext,boot该参数调整类加载器共享父类的优先级,可临时缓解冲突,但建议优先通过统一版本解决问题。
重新安装Eclipse
若上述方法无效,备份工作区后下载纯净版Eclipse 4.23,重新安装后逐步添加所需仓库和插件,避免一次性引入冲突组件。
内容的提问来源于stack exchange,提问作者Birudeo Garande

