当前位置: 首页 > 知识库问答 >
问题:

OSGi:在Apache Karaf中找不到UserAdmin

张星洲
2023-03-14

我正在尝试在Karaf2.3中安装并启动OSGi用户管理界面的ApacheFelix实现。3.

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

正如我在Karaf邮件列表中读到的,Karaf已经嵌入了OSGi概要API,但默认情况下不会导出所有包。我更改了配置。属性文件以显式导出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。奥斯基。服务useradmin似乎是由Karaf导出的,正如我在运行packages:exports时看到的那样。

我一直收到错误,直到我从配置文件中删除该行,并按照另一个线程中的建议部署OSGi简编API捆绑包。

然而,嵌入完整的概要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)

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


共有1个答案

宦飞
2023-03-14
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)

您列出的第一个bundle 0是导出useradmin,我怀疑它实际上并没有导出任何内容。第二个是导出一个完全不相关的包。第三个是导出实际的useradmin API。第四个是导出ApacheFelix特定的类。

在标准下载中,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

这意味着你必须安装一个包,其中包含usereminAPI,要么安装OSGI汇编API包,要么构建你自己的JAR,只包含你想要的部分(org.osgi.service.useradmin)。

编辑:

我还将指出,尚未发布的ApacheFelixUserAdmin版本将包含org。奥斯基。服务useradmin(应该如此!)这意味着最终您对概要API jar的依赖将消失。https://html" target="_blank">github.com/apache/felix/blob/trunk/useradmin/useradmin/pom.xml#L81

 类似资料:
  • 嗨,我刚遇到一个问题:OSGI无法启动,因为它找不到类:org/restlet/engine/adapter/httpserverhelper但我已经把它添加到任何地方(src,import-packes,plugins),但仍然得到这个错误,任何人可以帮助我吗?!谢谢

  • 我尝试在osgi容器中运行Hibernate验证器。 试着运行,equinox控制台没问题: 如果传递具有的Group class instance,那么验证就可以了,ConstraintVioldings包含一个违规“not null”。如果传递具有的Group class实例(一个字符,最小长度=2),则会引发异常 更新1 在hibernate bundle中导入的任何版本,在el-api和e

  • 我正在尝试使用Gradle在本地构建一个项目(https://github.com/fge/btf)。有一个插件“OSGi”正在使用,但每当我构建它,我得到错误的插件没有找到。我尝试过提供不同风格的OSGi,添加了存储库和依赖关系。仍然得到相同的错误。请帮帮忙。提前道谢。 失败:生成失败,出现异常。 > 其中:生成文件“/root/btf-1.2/Build.gradle”行:61 错误:在评估根

  • 我正在开发一个应用程序,它利用Hibernate框架将OSGi转换为更具体的Equinox Server。因此,我生成了库包和客户端插件,我在其中利用前面提到的库包对业务逻辑和数据库之间的通信进行编程。在我的项目中,我有以下包结构: 在管理器包中,我有那些负责将客户端与数据库和映射进行通信的类,其中一个包含配置文件和Hibernate映射文件。然而,当我部署捆绑包时,引用运行良好,但是我得到一个异

  • 对于Java SE应用程序,我使用Apache Felix和weld-osgi。问题是在注入的bean中,我使用了包< code > javax . enterprise . context . ApplicationScoped 中的< code>@ApplicationScoped。但是在< code > weld-OSGi-bundle-2 . 1 . 2 . final 中没有这个包。 此

  • 我的应用程序有一些OSGI模块和一个非OSGI部分。我尝试通过ApacheAries的JNDI在非osgi子系统中查找osgi服务。我用玻璃鱼。 我的蓝图xml如下所示: 我尝试了以下查找: 我部署了4个捆绑包: Apache Aries Util 但我得到一个例外: 我忘带包裹了吗?有人能帮我吗?