我正在尝试将一个简单的功能部署到品牌 Karaf 4.0.2中,它带来了一个带有JAXB规范的包:
<?xml version="1.0" encoding="UTF-8"?>
<features name="my-feature" xmlns="http://karaf.apache.org/xmlns/features/v1.3.0">
<feature name="my-javaee-api" version="6.0-5" install="auto">
<bundle>mvn:org.apache.geronimo.specs/geronimo-jaxb_2.2_spec/1.0.1</bundle>
</feature>
</features>
失败并显示以下错误消息:
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))"
]
]
我想知道它是如何错过javax.xml.namespace
的,因为它是OSGi-Framework的一部分。所以我检查了那个包是否真的丢失了:
admin@root()>package:exports | grep javax.xml.namespace
javax.xml.namespace | 0.0.0 | 0 | org.eclipse.osgi
瞧 - 这是问题的根源 - 版本。为了进行比较,我检查了它在 stock karaf上的外观:
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
它使用Felix并且版本为1.4.0。我的第一个想法是品牌 karaf使用Equinox作为默认的OSGi-Framework并将其切换为Felix将解决这个问题。但是看看里面的karaf / etc / config.properties已经反驳了这个想法(看起来很像 stock ):
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
现在我陷入僵局,不知道如何解决我的问题。有什么想法吗?
不幸的是我现在无法联系那些为karaf打上烙印的人,因为他们已经在圣诞假期¯\ _(ツ)_ /¯
答案 0 :(得分:0)
OSGi Framework的导出由配置属性org.osgi.framework.system.packages
和org.osgi.framework.system.packages.extra
控制。这些附加在运行时以形成系统包导出。
似乎在您的“股票”版本的Karaf(不确定这意味着什么,但我只会使用您的术语)有人已将javax.xml.namespace;version=1.4.0
添加到其中一个配置属性中。如果你能够在其他版本的Karaf中做同样的事情,那么事情应该有效。
答案 1 :(得分:0)
确保您的自定义发布不会更改config.properties
。
如果它确实确保 org.osgi.framework.system.packages.extra
确实包含javax.xml.namespace;version=1.4,
的那个版本
通常,如果要覆盖Karaf的某些属性,可以将这些更改放入custom.properties