【发布时间】:2014-03-11 00:07:10
【问题描述】:
我正在尝试在 Karaf 2.3.3 中安装并启动 OSGi UserAdmin 界面的 Apache Felix 实现。
karaf@root> install mvn:org.apache.felix/org.apache.felix.useradmin/1.0.3
但是,捆绑包永远不会得到解决,我在启动时收到以下错误:
Unable to start bundle 89: Activator start error in bundle org.apache.felix.useradmin [89].
[...]
Caused by: java.lang.NoClassDefFoundError: org.osgi.service.useradmin.UserAdminListener
at org.apache.felix.useradmin.osgi.UserAdminListenerListHelper.class$(UserAdminListenerListHelper.java:38)
at org.apache.felix.useradmin.osgi.UserAdminListenerListHelper.<init>(UserAdminListenerListHelper.java:38)
at org.apache.felix.useradmin.osgi.Activator.createServiceContext(Activator.java:68)
at org.apache.felix.useradmin.osgi.Activator.start(Activator.java:37)
at org.apache.felix.framework.util.SecureAction$Actions.run(SecureAction.java:1605)
at java.security.AccessController.doPrivileged(Native Method)[:1.7.0_51]
at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:636)
at org.apache.felix.framework.Felix.activateBundle(Felix.java:1977)
... 16 more
正如我在this thread from the Karaf mailing list 中读到的,Karaf 已经嵌入了 OSGi Compendium API,但默认情况下不会导出所有包。我更改了config.properties 文件以显式导出UserAdmin 包:
org.osgi.framework.system.packages= \
[...]
org.osgi.service.permissionadmin;uses:="org.osgi.framework";version="1.1", \
org.osgi.service.useradmin;uses:="org.osgi.framework";version="1.1", \
[...]
org.osgi.service.useradmin 包似乎是由 Karaf 导出的,正如我在运行 packages:exports 时看到的那样。
在我从配置文件中删除该行并按照in this other thread 的建议部署 OSGi Compendium API 包之前,我一直收到错误消息。
但是,嵌入完整的 Compendium API 对我来说似乎有些矫枉过正(尽管我可能错了)。我现在有 4 个包导出 UserAdmin 包:
karaf@root> packages:exports | grep useradmin
0 # org.osgi.service.useradmin; version=1.1.0
20 org.osgi.jmx.service.useradmin; version=1.1.0
82 org.osgi.service.useradmin; version=1.1.0 --> OSGi Compendium osgi.cmpn (5.0.0.201305092017)
89 org.apache.felix.useradmin; version=1.0.0 --> Apache Felix User Admin Service (1.0.3)
您知道实现这一目标的更好/更简单的方法吗?
【问题讨论】:
标签: osgi classnotfoundexception apache-felix apache-karaf