2014-02-12 109 views
0

我正尝试安装并启动Karaf 2.3.3中的OSGi UserAdmin接口的Apache Felix实现。OSGi:无法在Apache Karaf中找到UserAdmin

[email protected]> 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 

正如我在​​阅读,Karaf已经嵌入了OSGi纲要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看到。


我一直得到错误,直到我删除从配置文件中的行,并部署了OSGi纲要API捆绑的建议in this other thread

但是,嵌入完整的Compendium API似乎对我有点矫枉过正(虽然我可能是错的)。我现在有4个包导出UserAdmin包:

[email protected]> 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) 

你知道的更好/更简单的方法来实现这一目标?

回答

1
[email protected]> 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) 

,首先你捆绑上市,0,即出口useradmin,我怀疑是不是实际出口任何东西。第二个是出口一个完全不相关的软件包。第三个是导出实际的useradmin API。第四个是导出apache felix特定的类。

Karaf实际上并没有在标准下载的任何地方包含useradmin软件包。

apache-karaf-2.3.3 sartrip -> gfind -iname \*jar | parallel unzip -l {} | grep userad 
    0 01-23-13 14:59 org/osgi/jmx/service/useradmin/ 
4462 01-23-13 14:59 org/osgi/jmx/service/useradmin/UserAdminMBean.class 
    822 01-23-13 14:59 org/osgi/jmx/service/useradmin/packageinfo 
    0 02-08-13 11:24 org/apache/aries/jmx/useradmin/ 
12187 02-08-13 11:24 org/apache/aries/jmx/useradmin/UserAdmin.class 
1828 02-08-13 11:24 org/apache/aries/jmx/useradmin/UserAdminMBeanHandler.class 

这意味着你必须安装包含useradmin API捆绑,通过安装在OSGI纲要API软件包或建立包含有你想要的部分(org.osgi.service.useradmin)你自己的JAR。

编辑:

我还要指出的是,Apache的菲利克斯useradmin的尚未发布的版本将包含org.osgi.service.useradmin意义,最终你的依赖(因为它应该!)简编API jar将消失。 https://github.com/apache/felix/blob/trunk/useradmin/useradmin/pom.xml#L81

+0

我意识到第二次导出与用户管理服务无关,只是忘了将其修改出来:谢谢指出! 我期待在嵌入式API中使用新的Felix UserAdmin! –