OSGi-由于导入之间存在冲突,候选置换失败

OSGi-由于导入之间存在冲突,候选置换失败,osgi,Osgi,我的Felix OSGi容器在通过以下方式部署groovy后无法正常启动: obr:部署“Groovy脚本语言”@1.7.3 设法部署并让Groovy运行,直到我在OSGi容器上重新启动…然后大多数捆绑包都不会启动。FWIW,我很确定Groovy不是原因,尽管它的包名中有一个输入错误。:-) 经过一些故障排除,打开Felix的wire logging(感谢上帝!),我注意到了这一点(在所有其他故障包中,原因类似): 2011-04-03 16:26:43108调试[FelixStartLevel

我的Felix OSGi容器在通过以下方式部署groovy后无法正常启动:

obr:部署“Groovy脚本语言”@1.7.3

设法部署并让Groovy运行,直到我在OSGi容器上重新启动…然后大多数捆绑包都不会启动。FWIW,我很确定Groovy不是原因,尽管它的包名中有一个输入错误。:-)

经过一些故障排除,打开Felix的wire logging(感谢上帝!),我注意到了这一点(在所有其他故障包中,原因类似):

2011-04-03 16:26:43108调试[FelixStartLevel]felix.wire-由于导入之间存在冲突,候选置换失败;如果可能的话,我会再试一次。(org.apache.felix.framework.resolver.ResolveException:无法解析模块org.apache.felix.http.bundle[36.0],因为它通过两个依赖链暴露于org.apache.felix.framework[0]和com.springsource.org.aspectj.tools[47.0]中的包“org.osgi.framework”。 链1: org.apache.felix.http.bundle[36.0] 导入:(&(package=org.osgi.framework)(版本>=1.3.0)) | 导出:package=org.osgi.framework org.apache.felix.framework[0] 链2: org.apache.felix.http.bundle[36.0] 导入:(&(package=org.osgi.service.log)(版本>=1.3.0)) | 导出:package=org.osgi.service.log;使用:=org.osgi.framework osgi.cmpn[15.0] 导入:(&(package=org.osgi.framework)(版本>=1.5.0)(!(版本>=2.0.0))) | 导出:package=org.osgi.framework com.springsource.org.aspectj.tools[47.0]) 似乎
o.a.felix.framework
c.s.o.aspectj.tools
都在导出
o.osgi.framework

通过删除bundle id 47(
c.s.o.aspectj.tools
),我可以让事情再次运行,但还需要检查是否有其他影响。感觉不对,因为我删除了
c.s.o.aspectj.tools
,但OBR存储库将其指示为Groovy所需(或可选)。事实上,它是通过Groovy的obr:deploy命令安装的

感觉像是
c.s.o.aspectj.tools
不应该导出
o.osgi.framework
,但这只是一个猜测,因为我不使用aspectj工具


问:在不诉诸有根据的猜测的情况下,解决这些问题的正确方法是什么?

你是对的,
c.s.o.aspectj.tools
不应该是export
org.osgi.framework
,但显然是这样。准确地说,我检查了版本
1.6.8
,它有以下导出语句:

org.osgi.framework;version="1.6.8.RELEASE"
此外,它不导入
org.osgi.framework
。这是完全错误的,我认为值得向Spring团队报告错误;如果导出,通常应该导入,我想不出一个有效的理由来使用与实际版本不同的版本标记
osg.osgi.framework

你现在怎么能避开这件事?通过将
http
cmpn
连接到相同的
框架
包,可以解决两个解析链的问题;也许即使是shell中一个简单的
osgi:refresh
也能帮助您,因为声明的版本(
1.6.8.RELEASE
)碰巧在
http
cmpn
的导入范围内

如果你真的不需要
aspectj
之类的东西,我会把它删掉。

谢谢@angelo!发现此报告的错误,似乎与此相关。我现在只删除aspectj。
org.osgi.framework;version="1.6.8.RELEASE"