【发布时间】:2014-06-23 02:14:18
【问题描述】:
我理解 OSGi 抱怨多个依赖链的概念 - 一个包不止一次可用,当导入包没有准确指定它需要哪个版本时,所以 OSGi 容器可能会遇到不知道什么的麻烦提供。
不幸的是,我本周遇到了这样的问题,但涉及的两个捆绑包都是第三方捆绑包,所以我无法真正影响他们的进出口。这是我收到的两条错误消息:
org.osgi.framework.BundleException: Uses constraint violation. Unable to resolve bundle revision org.hibernate.core [28.0] because it is exposed to package 'javax.xml.stream' from bundle revisions com.springsource.javax.xml.stream [23.0] and org.apache.felix.framework [0] via two dependency chains.
Chain 1:
org.hibernate.core [28.0]
import: (osgi.wiring.package=javax.xml.stream)
|
export: osgi.wiring.package=javax.xml.stream
com.springsource.javax.xml.stream [23.0]
Chain 2:
org.hibernate.core [28.0]
import: (osgi.wiring.package=javax.xml.transform.stax)
|
export: osgi.wiring.package=javax.xml.transform.stax; uses:=javax.xml.stream
export: osgi.wiring.package=javax.xml.stream
org.apache.felix.framework [0]
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3824)
at org.apache.felix.framework.Felix.startBundle(Felix.java:1868)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191)
at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:295)
at java.lang.Thread.run(Thread.java:724)
org.osgi.framework.BundleException: Uses constraint violation. Unable to resolve bundle revision org.hibernate.core [28.0] because it is exposed to package 'javax.xml.stream' from bundle revisions org.apache.felix.framework [0] and com.springsource.javax.xml.stream [23.0] via two dependency chains.
Chain 1:
org.hibernate.core [28.0]
import: (osgi.wiring.package=javax.xml.stream)
|
export: osgi.wiring.package=javax.xml.stream
org.apache.felix.framework [0]
Chain 2:
org.hibernate.core [28.0]
import: (osgi.wiring.package=org.dom4j.io)
|
export: osgi.wiring.package=org.dom4j.io; uses:=javax.xml.stream
com.springsource.org.dom4j [27.0]
import: (&(osgi.wiring.package=javax.xml.stream)(version>=1.0.1)(!(version>=2.0.0)))
|
export: osgi.wiring.package=javax.xml.stream
com.springsource.javax.xml.stream [23.0]
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3824)
at org.apache.felix.framework.Felix.startBundle(Felix.java:1868)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191)
at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:295)
at java.lang.Thread.run(Thread.java:724)
当我尝试从已安装的捆绑包中删除 com.springsource.javax.xml.stream 时,com.springsource.org.dom4j 抱怨缺少包 javax.xml.stream。
我检查了org.apache.felix.framework 的MANIFEST.MF 文件,因为我真的很惊讶Felix 显然导出了javax.xml.stream,但它不包含这样的条目。此外,dom4j 捆绑包不会根据其清单重新导出流包。
如果有任何提示可以让我更接近回答这个依赖链问题的来源,我将不胜感激。从我的角度来看,除了 com.springsource.javax.xml.stream 导出所说的包之外,我找不到捆绑包-
【问题讨论】:
标签: java hibernate osgi dependency-management apache-felix