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

OSGi系统包未导出的系统包

燕嘉颖
2023-03-14

我是OSGi的新手。我正在Android上运行ApacheFelix。我已将系统包导出的系统包设置如下:

/** Packages exported by the system bundle. */
String SYSTEM_PACKAGES = 
    "org.osgi.framework;version=\"1.6.0\"," + 
    "org.osgi.framework.launch;version=\"1.0.0\"," +
    "org.osgi.framework.wiring;version=\"1.0.0\"," +
    "org.osgi.framework.startlevel;version=\"1.0.0\"," +
    "org.osgi.framework.hooks.bundle;version=\"1.0.0\"," +
    "org.osgi.framework.hooks.resolver;version=\"1.0.0\"," +
    "org.osgi.framework.hooks.service;version=\"1.1.0\"," +
    "org.osgi.framework.hooks.weaving;version=\"1.0.0\"," +
    "org.osgi.service.packageadmin;version=\"1.2.0\"," +
    "org.osgi.service.startlevel;version=\"1.1.0\"," +
    "org.osgi.service.url;version=\"1.0.0\"," +
    "org.osgi.util.tracker;version=\"1.5.0\"";

Map map = new HashMap();
map.put ( "org.osgi.framework.system.packages" , SYSTEM_PACKAGES );
// I set more properties ...
felix = new Felix ( map );
felix.start();

但是,当我尝试安装ConfigAdmin捆绑包时,它会给出一个BundleException:

org.osgi.framework.BundleException: Unresolved constraint in bundle 
org.apache.felix.configadmin [1]: Unable to resolve 1.0: missing requirement [1.0] 
osgi.wiring.package; (&(osgi.wiring.package=org.osgi.framework)(version>=1.4.0)
(!(version>=2.0.0)))

当我导出组织时,为什么它缺少这个要求。奥斯基。版本1.6的系统包中的框架包。0? 我已通过以下操作检查系统属性设置是否正确:

// DEBUG
Toast.makeText ( getApplicationContext() , 
                 felix.getBundleContext().getProperty ( "org.osgi.framework.system.packages" ) , 
                 Toast.LENGTH_LONG ).show();

也许这是我的一个简单错误。有人能帮我吗?

谢谢!

共有2个答案

臧俊杰
2023-03-14

问题解决了。设置额外软件包参数时出错:

map.put ( "org.osgi.framework.system.packages.extra" , "" );

Felix不接受空字符串(我最初使用的是空字符串,我想稍后会向其中添加包名)。当我删除这句话时,一切都很顺利。

正如BJ Hargrave所说,无需设置系统包。

此外,我们不应该将空字符串作为映射值传递,我没有意识到这一点。

唐信瑞
2023-03-14

你为什么要这么做?Felix应该自动从系统包导出这些包。

如果您需要从系统包中导出正常导出包以外的其他包,请使用org。奥斯基。框架系统包装。额外的启动配置属性。

 类似资料:
  • 在ApacheFelixOSGi框架中,配置文件提供了在Felix生态系统中包含其他系统包的选项。Felix配置中的行如下所示: 我将当前的OSGi框架从Felix切换到EclipseEquinox,我发现我的一个捆绑包依赖于包,但在Equinox的(模糊的)配置文档中找不到任何与Felix中的设置等效的东西。有人知道Equinox的方式包括这个额外的包吗? 如果您正在查看我在上面共享的链接(到E

  • 我如何实现这一点?我尝试将OSGi捆绑包作为JarInputstream读取,并读取捆绑激活器完全限定的类路径,并尝试使用class.forName(“”)和转换到BundleActivator接口的类型来实例化它。但是在启动它的同时,它将bundle上下文作为参数来启动方法。 有没有办法,我可以把OSGi包实用地交给容器,这样它就会负责安装和启动包,然后我的UI就会自动在显示中获取这个新的包名。

  • 用命令去下载,升级,管理安装在系统上的软件。Windows 平台用 chocolatey,macOS 可以使用 Homebrew。

  • sed sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。 sed命令行格式为: sed [-nefri] ‘command’ 输入文本 常用选项: -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的

  • 问题内容: 我有以下程序: module-info.java Main.java 该程序使用以下选项成功编译: 但是,当我添加参数时,它将失败: 基本上,这两个命令是等效的。那么为什么要禁止后者呢? 另外,由于IDEA将参数传递给javac,因此,如果我的项目需要内部API,则无法在IDEA中进行开发。 我正在使用JDK 9 + 178。 问题答案: 这似乎从这个bug票是不能结合使用,和。 从链

  • 用于查看消息中心和操作日志信息,并支持自定义企业信息、配置邮件短信服务器、设置公告以及常用系统等。 公告 公告用于发布需要告知云管平台上所有用户的消息。 企业信息 支持为企业自定义系统名称、logo及版权信息。 常用系统 用于配置常用系统的网址信息,用户可在云联壹云平台快速跳转到其他常用系统。