2014-02-12 48 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! –