Tycho构建RCP应用时org.osgi.service.cm.ConfigurationAdmin无法解析如何解决?
解决OSGi中ConfigurationAdmin服务缺失问题
ConfigurationAdmin是OSGi规范定义的核心服务,你的场景里org.apache.aries.blueprint.cm找不到它,是因为运行环境中没有提供该服务的实现Bundle。针对RCP+Tycho的环境,有两种直接的解决方式:
方案1:引入Equinox自带的ConfigurationAdmin实现
Eclipse Mars(4.5)的Equinox框架自带了ConfigurationAdmin的实现,只需把org.eclipse.equinox.cm这个Bundle加入到你的运行环境中:
- 打开你的Tycho目标定义文件(
.target),添加org.eclipse.equinox.cmBundle,版本选择与Mars兼容的1.2.0左右即可 - 如果用产品配置文件(
.product),在「Contents」标签页里把org.eclipse.equinox.cm添加到产品包含的Bundle列表中 - 重新执行Tycho构建,启动应用时这个Bundle会自动启动并注册ConfigurationAdmin服务
方案2:使用Apache Felix的ConfigurationAdmin实现
如果你偏好Felix的实现,可引入org.apache.felix.configadmin Bundle:
- 把该Bundle加入到目标平台或Maven依赖中,建议选1.8.x系列版本,和Tycho 0.24.0兼容性较好
- 确保该Bundle在运行时被正确包含并启动
验证服务是否生效
启动应用后,在OSGi控制台执行以下命令检查服务状态:
services org.osgi.service.cm.ConfigurationAdmin
如果输出中能看到对应的服务条目,说明ConfigurationAdmin服务已成功注册,org.apache.aries.blueprint.cm的依赖问题就会解决。
额外提醒
- 注意启动顺序:ConfigurationAdmin实现Bundle的启动级别要早于
org.apache.aries.blueprint.cm,避免因启动滞后导致依赖超时 - 若用Tycho的
pom.xml管理依赖,要在对应模块中添加对ConfigurationAdmin实现Bundle的依赖,确保构建时被纳入产物
内容的提问来源于stack exchange,提问作者IvanS
相关产品推荐
相关产品推荐

