Osgi ApacheKaraf中JAXB的配置-无法解析javax.xml.namespace
我正在尝试将一个简单的功能部署到品牌Karaf 4.0.2中,它带来了一个带有JAXB规范的捆绑包:Osgi ApacheKaraf中JAXB的配置-无法解析javax.xml.namespace,osgi,apache-karaf,Osgi,Apache Karaf,我正在尝试将一个简单的功能部署到品牌Karaf 4.0.2中,它带来了一个带有JAXB规范的捆绑包: mvn:org.apache.geronimo.specs/geronimo-jaxb_2.2_spec/1.0.1 它失败,并显示以下错误消息: 2015-12-22 13:38:07,218 | ERROR | a0a-abc5141ad81f | FeatureDeploymentListener | 43 - org.apache.karaf
mvn:org.apache.geronimo.specs/geronimo-jaxb_2.2_spec/1.0.1
它失败,并显示以下错误消息:
2015-12-22 13:38:07,218 | ERROR | a0a-abc5141ad81f | FeatureDeploymentListener
| 43 - org.apache.karaf.deployer.features - 4.0.2 | Unable to install features
org.osgi.service.resolver.ResolutionException: Unable to resolve root:
missing requirement [root] osgi.identity; osgi.identity=my-javaee-api; type=karaf.feature; version="[6.0.0.5,6.0.0.5]";
filter:="(&(osgi.identity=my-javaee-api)(type=karaf.feature)(version>=6.0.0.5)(version<=6.0.0.5))"
[
caused by: Unable to resolve my-javaee-api/6.0.0.5:
missing requirement [my-javaee-api/6.0.0.5] osgi.identity; osgi.identity=org.apache.geronimo.specs.geronimo-jaxb_2.2_spec;
type=osgi.bundle; version="[1.0.1,1.0.1]"; resolution:=mandatory
[
caused by: Unable to resolve org.apache.geronimo.specs.geronimo-jaxb_2.2_spec/1.0.1:
missing requirement [org.apache.geronimo.specs.geronimo-jaxb_2.2_spec/1.0.1] osgi.wiring.package;
filter:="(&(osgi.wiring.package=javax.xml.namespace)(version>=1.0.0))"
]
]
瞧,这是问题的根源——版本。为了进行比较,我检查了它在库存卡拉夫上的外观:
它使用Felix,有一个合适的版本1.4.0。我的第一个想法是品牌karaf使用Equinox作为默认OSGi框架,将其切换到Felix将解决这一问题。但是,查看一下karaf/etc/config.properties内部,就可以证明这种想法是错误的(它看起来和股票一模一样):
现在我陷入了僵局,不知道如何解决我的问题。有什么想法吗
不幸的是,我现在无法联系那些给卡拉夫打上烙印的人,因为他们已经在过圣诞节了\_(ツ)_/“来自OSGi框架的导出由配置属性
org.OSGi.Framework.system.packages
和org.OSGi.Framework.system.packages.extra
控制。这些属性在运行时附加以形成系统包导出
似乎在你的“库存”版本的Karaf中(不确定这意味着什么,但我只使用你的术语)有人向其中一个配置属性添加了
javax.xml.namespace;version=1.4.0
。如果您能够在另一个版本的Karaf中执行相同的操作,那么一切都应该正常。请确保您的自定义发行版不会更改config.properties
。
如果确实如此,请确保org.osgi.framework.system.packages.extra
包含javax.xml.namespace;version=1.4,
通常,如果要覆盖Karaf的某些属性,可以将这些更改放入
custom.properties
admin@root()>package:exports | grep javax.xml.namespace
javax.xml.namespace | 0.0.0 | 0 | org.eclipse.osgi
karaf@root()> package:exports | grep javax.xml.namespace
javax.xml.namespace | 0.0.0 | 0 | org.apache.felix.framework
javax.xml.namespace | 1.4.0 | 0 | org.apache.felix.framework
karaf.framework=felix
karaf.framework.equinox=mvn\:org.eclipse.birt.runtime/org.eclipse.osgi/3.10.2.v20150203-1939
karaf.framework.felix=mvn\:org.apache.felix/org.apache.felix.framework/5.2.0