Fabric8部署bundle时出现javax.jws依赖缺失的ResolutionException异常
根因定位
报错存在两个明确的核心问题:
- 依赖版本范围配置错误:报错日志中
bundleproject-interface的依赖范围写作[2.0.14.RELEASE,2.0.13.RELEASE],不符合OSGi版本范围「左闭右开、下限≤上限」的规则,永远无法匹配到可用的bundle。 javax.jws包无提供方:你当前使用的Fabric8 1.2.0.redhat-133默认没有导出javax.jws1.1.0版本的包,虽然你在bundle配置中声明了导入,但容器中没有对应包的提供方,导致解析失败。此前JBoss Fuse 6.2.1默认内置了该包的导出配置,所以运行正常。
解决方案
1. 修复版本范围配置
找到你的项目中bundleinterface karaf feature的定义文件(默认路径为src/main/feature/feature.xml),将其中依赖bundleproject-interface的版本范围修正为合法值:
- 如果使用固定版本,直接写
<bundle>mvn:your.group.id/bundleproject-interface/2.0.13.RELEASE</bundle> - 如果要适配小版本升级,写成
[2.0.13.RELEASE,2.1.0)即可。
2. 解决javax.jws包依赖问题
二选一即可:
- 方案A(推荐):在Fabric8容器中安装该包的官方实现,karaf命令行执行:
安装完成后将该bundle设置为随容器启动,即可作为公共包供所有bundle导入。install mvn:org.apache.geronimo.specs/geronimo-jws-api_1.1_spec/1.0.1 - 方案B:如果你的业务代码实际没有用到
javax.jws相关功能,修改maven-bundle-plugin的导入配置,将该包设置为可选导入:<Import-Package> ... javax.jws;version="[1.1.0,2.0.0)";resolution:=optional, * </Import-Package>
3. 修正编译版本不匹配问题
你当前用Java 1.8编译,但maven-compiler-plugin配置的source/target为1.6,跨版本编译可能引发运行时类兼容问题,建议要么将编译环境切换为JDK 6,要么将编译配置修改为:
<configuration> <source>1.8</source> <target>1.8</target> </configuration>
修改完成后重新构建bundle、更新Fabric8中的feature版本,重新部署即可解决问题。
内容的提问来源于stack exchange,提问作者david madrid
相关产品推荐
相关产品推荐

