Maven打包Eclipse RCP启动失败,OSGI模块版本冲突排查求助
解决Eclipse RCP打包后Windows启动的OSGi依赖冲突问题
已通过Maven完成Eclipse RCP的Windows环境打包,但启动时抛出如下OSGi Bundle解析异常,导致无法运行:
org.osgi.framework.BundleException: Could not resolve module: com.cubrid.common.update [4] Unresolved requirement: Require-Bundle: org.eclipse.equinox.p2.operations -> Bundle-SymbolicName: org.eclipse.equinox.p2.operations; bundle-version="2.5.800.v20200410-1336"; singleton="true" org.eclipse.equinox.p2.operations [93] Unresolved requirement: Import-Package: org.eclipse.equinox.internal.p2.director -> Export-Package: org.eclipse.equinox.internal.p2.director; bundle-symbolic-name="org.eclipse.equinox.p2.director"; bundle-version="2.4.700.v20200511-1530"; version="0.0.0"; x-friends="org.eclipse.equinox.p2.operations, org.eclipse.equinox.p2.repository.tools, org.eclipse.pde.core, org.eclipse.equinox.p2.reconciler.dropins, org.eclipse.equinox.p2.ui, org.eclipse.equinox.p2.director.app" org.eclipse.equinox.p2.director [82] Unresolved requirement: Import-Package: org.eclipse.equinox.internal.provisional.configurator Unresolved requirement: Require-Bundle: org.eclipse.equinox.p2.ui -> Bundle-SymbolicName: org.eclipse.equinox.p2.ui; bundle-version="2.6.0.v20200602-1138"; singleton="true" org.eclipse.equinox.p2.ui [102] Unresolved requirement: Import-Package: org.eclipse.equinox.internal.provisional.configurator Unresolved requirement: Import-Package: org.eclipse.equinox.internal.p2.director -> Export-Package: org.eclipse.equinox.internal.p2.director; bundle-symbolic-name="org.eclipse.equinox.p2.director"; bundle-version="2.4.700.v20200511-1530"; version="0.0.0"; x-friends="org.eclipse.equinox.p2.operations, org.eclipse.equinox.p2.repository.tools, org.eclipse.pde.core, org.eclipse.equinox.p2.reconciler.dropins, org.eclipse.equinox.p2.ui, org.eclipse.equinox.p2.director.app" Unresolved requirement: Import-Package: org.eclipse.equinox.internal.p2.operations -> Export-Package: org.eclipse.equinox.internal.p2.operations; bundle-symbolic-name="org.eclipse.equinox.p2.operations"; bundle-version="2.5.800.v20200410-1336"; version="0.0.0"; x-friends="org.eclipse.pde.ui,org.eclipse.equinox.p2.ui" at org.eclipse.osgi.container.Module.start(Module.java:463) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$2.run(ModuleContainer.java:1845) at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$1$1.execute(EquinoxContainerAdaptor.java:136) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1838) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1779) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1743) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1665) at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1) at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:345)
错误分析
从栈信息来看,核心问题有两点:
org.eclipse.equinox.p2.director和org.eclipse.equinox.p2.ui均无法解析org.eclipse.equinox.internal.provisional.configurator导入包,该包属于org.eclipse.equinox.configurator模块,大概率是打包时遗漏了该核心配置器组件。- P2相关模块(
p2.director、p2.operations、p2.ui)版本跨线(分别为2020-05、2020-04、2020-06版本),内部依赖的x-friends限定包存在版本不匹配问题。
需修改的配置项
补充核心配置器模块
- 在RCP产品配置(.product文件)的依赖项中添加
org.eclipse.equinox.configurator,并设置启动级别为2、标记为自动启动。 - 若使用Tycho打包,检查target-platform定义文件(.target),确保包含
org.eclipse.equinox.configurator模块,且版本与其他Equinox组件匹配。
- 在RCP产品配置(.product文件)的依赖项中添加
统一P2组件版本
- 调整Maven依赖管理或target-platform配置,确保
org.eclipse.equinox.p2.director、org.eclipse.equinox.p2.operations、org.eclipse.equinox.p2.ui使用同一版本线的组件(例如统一采用2020-06版本的P2组件),避免跨版本依赖。
- 调整Maven依赖管理或target-platform配置,确保
检查模块依赖声明
- 查看
com.cubrid.common.update模块的MANIFEST.MF文件,确认Require-Bundle中org.eclipse.equinox.p2.operations和org.eclipse.equinox.p2.ui的版本范围是否合理,建议使用宽松的版本范围(如[2.6.0,3.0.0))而非固定版本。
- 查看
验证打包配置
- 检查Maven pom.xml中的Tycho配置,确保
tycho-maven-plugin的版本与target-platform的Equinox版本兼容,且打包时包含所有必要的系统bundle。
- 检查Maven pom.xml中的Tycho配置,确保
需要补充的配置文件
如需进一步定位问题,请提供以下文件:
- RCP产品配置文件(.product)
- 项目及父模块的pom.xml文件
- Target平台定义文件(.target,若使用自定义平台)
- 打包后的
configuration/config.ini文件 com.cubrid.common.update模块的MANIFEST.MF文件
内容的提问来源于stack exchange,提问作者Dongmin kim
相关产品推荐
相关产品推荐

