OSGi包无法间歇解决

时间:2015-09-23 14:51:43

标签: osgi apache-felix osgi-bundle

我编写了一个OSGi包,它依赖于以下spring框架包和其他类似的JAR。

org.springframework.core-3.2.3.RELEASE.jar

大多数情况下,spring框架核心包没有任何问题。但有时,捆绑无法解决依赖性。单击felix控制台中的开始按钮时会抛出以下错误:

*ERROR* [FelixDispatchQueue] org.springframework.core FrameworkEvent ERROR (org.osgi.framework.BundleException: Unresolved constraint in bundle org.springframework.core [494]: Unable to resolve 494.0: missing requirement [494.0] osgi.wiring.package; (&(osgi.wiring.package=javax.xml.stream.events)(version>=0.0.0)))
org.osgi.framework.BundleException: Unresolved constraint in bundle org.springframework.core [494]: Unable to resolve 494.0: missing requirement [494.0] osgi.wiring.package; (&(osgi.wiring.package=javax.xml.stream.events)(version>=0.0.0))
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4095)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2114)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1368)
at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
at java.lang.Thread.run(Unknown Source)

此外,其他一些弹簧框架JAR也会抛出相同的错误而无法解决/启动。

*ERROR* [FelixDispatchQueue] org.springframework.beans FrameworkEvent ERROR (org.osgi.framework.BundleException: Unresolved constraint in bundle org.springframework.beans [495]: Unable to resolve 495.0: missing requirement [495.0] osgi.wiring.package; (&(osgi.wiring.package=org.apache.commons.logging)(version>=1.1.1)(!(version>=2.0.0))))
org.osgi.framework.BundleException: Unresolved constraint in bundle org.springframework.beans [495]: Unable to resolve 495.0: missing requirement [495.0] osgi.wiring.package; (&(osgi.wiring.package=org.apache.commons.logging)(version>=1.1.1)(!(version>=2.0.0)))
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4095)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2114)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1368)
at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
at java.lang.Thread.run(Unknown Source)

据我了解,javax。*包由系统包提供。有人可以帮我解决这个问题吗?

修改

当我杀死java进程时会发生这种情况。此外,所有包含以下导入的包都会发生这种情况:

javax.jcr
javax.swing
javax.xml.stream.events
org.apache.commons.logging
javax.servlet
javax.sql
javax.script
javax.net

当我杀死java进程并重新启动AEM时,我遇到了这个问题。当我卸载捆绑包并重新启动我的AEM并重新安装捆绑包时,它可以正常工作。

1 个答案:

答案 0 :(得分:0)

默认情况下,系统包仅提供java.*个包。必须使用框架属性org.osgi.framework.system.packages定义所有其他包。每个OSGi框架都有一个此属性的默认配置,该配置通常也依赖于所使用的Java运行时版本。

如果系统包没有导出javax包但你知道它在jra中可用,那么你可以使用framework属性org.osgi.framework.system.packages.extra。它允许定义除了默认导出的包之外的包。

有一点奇怪的是你写的有时你只有错误。我希望它能够一直工作或一直失败。