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

OSGi bundle从非bundle jar导入包:为它们创建bundle?

顾乐家
2023-03-14

我获得了一个jar文件rabbitmq-client.jar,它已经打包为OSGi包(在其manifest.mf中包含Bundle-Name和其他类似属性),我希望将其作为包安装。此jar从commons-io-1.2.jar导入包org.apache.commons.ioorg.apache.commons.io.input。RabbitMQ客户机2.7.1发行版还包含commons-cli-1.1.jar,所以我认为它也是必需的。

我检查了这些公用罐子的清单,发现它们似乎不是打包成包的。也就是说,它们的清单没有任何标准束属性。

我的具体问题是:如果我将rabbitmq-client.jar安装为一个捆绑包,那么访问它需要从commons JAR导入的包的正确方法是什么?在不重建rabbitmq-client.jar的情况下,我能想到的备选方案只有三个。

    null

我读到过,在OSGi容器中通常不使用全局类路径。我不清楚在构建单个bundle类路径时全局类路径中的项是否可用。但是,我注意到rabbitmq-client.jar还导入了其他包,如javax.net,我假定它来自全局类路径。还是有其他的捆绑包出口它们?

多谢协助!

共有1个答案

姬朗
2023-03-14

解决方案(2)是正确的方法。(1)和(3)将不起作用,因为正如您似乎已经理解的,在OSGi中不存在全局类路径这样的东西。

每个bundle导入它所需要的所有包,而这些包必须由另一个bundle导出。对此有一个例外,就是java.*命名空间下的所有类...即不需要导入java.langjava.util等。

javax.net这样的包确实来自JRE,但它们仍然不在“全局类路径”上。有一个特殊的捆绑包叫做系统捆绑包,它代表OSGi内部的OSGi框架本身。该包导出了一组来自JRE的包,如javax.netjavax.swingorg.w3c.dom等。

 类似资料:
  • 主要内容:Python包的导入《Python包》一节中已经提到,包其实就是文件夹,更确切的说,是一个包含“__init__.py”文件的文件夹。因此,如果我们想手动创建一个包,只需进行以下 2 步操作: 新建一个文件夹,文件夹的名称就是新建包的包名; 在该文件夹中,创建一个 __init__.py 文件(前后各有 2 个下划线‘_’),该文件中可以不编写任何代码。当然,也可以编写一些 Python 初始化代码,则当有其它程序文

  • 问题:“main.xsd”是一个有效的xml模式文档吗? 当使用解析器(或从python库(该库反过来使用xmllint)进行验证时,我会得到以下错误: 元素“{http://www.w3.org/2001/xmlschema}Element”,属性“ref”:不允许从该架构引用命名空间“http://imported”中的组件,因为没有由import语句指示。WXS架构main.xsd编译失败

  • 问题内容: 这就是在Android Studio中导入依赖项的方式。在这种情况下,okhttp: 我想导入我自己创建的依赖项。例如: 在这一点上,如果我学习如何创建依赖关系并在Android Studio项目中导入就足够了。 但是如果可能的话,我想将我的库托管在git(github)仓库中。太棒了 问题答案: 要实现它,您可以通过以下几种方法: 在中央Maven或Jcenter中发布您的库(工件)

  • 问题内容: 我已将dsl作业配置为删除未引用的作业,并且我想保留以下内容: 我试图做到这一点: Jenkins创建job1,但是在创建job2时将其删除。如何遍历列表以创建多个作业? 也许我可以构建multibranchPipelineJob objs和listView.jobs的映射/闭合,然后以某种方式将其传递给dsl? 问题答案: 我愚蠢的工作本身实际上已经创建好,只是列表视图代替了他们。之

  • 我试着寻找一些例子,但它们都给我带来了问题。这是最简单的一个,看起来应该能用 我是海布里斯的新手,尤其是海布里斯·因佩克斯,我在这一点上有点不知所措,所以我当然非常感谢你的帮助。

  • 问题内容: 我知道应该避免本地进口,但是在这种情况下需要特殊情况。这是一个私有存储库,由于服务器上缺少私有密钥,因此与绝对URL一起使用时,heroku buildpack在该阶段失败。 现在我得到这个错误。 所有导入路径都已更改为本地版本,那么还有什么可以使软件包成为“非本地”文件呢?我该如何解决? 问题答案: 我修好了它。问题是root软件包在中。一旦我将软件包移到错误处,错误就消失了(因此,