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

在Felix中,使用Maven、DS、SCR的OSGi包的最小裸值是多少?

经嘉
2023-03-14

OSGi中组件的布线过程似乎随着时间的推移而演变。

进展情况似乎如下:

  • 直接API访问
  • ServiceTracker模式
  • 白板图案
  • 声明性服务
  • Bnd
  • 伊波乔??Spring这一点很模糊

有这么多不同的库和方法,我需要一种方法来筛选出合理的方法。我不知道什么时候这些技术是针对同一问题的重复方法,或者是相互依赖。

我知道我将使用以下工具:

  • 阿帕奇费利克斯
  • 阿帕奇吊索
  • 马文

除此之外,我还需要一种简单的技术来创建包,而不需要任何复制。

这是我使用maven和以下插件创建的bundle的屏幕截图:maven-bundle-plugin,maven-scr-plugin。

我注意到很多冗余,不知道什么是必要的。

>

MANIFEST. MF这也列出了依赖关系并引用serviceComponents.xmlService-Component: OSGI-INF/serviceComponents.xml

服务组件。xml似乎是清单的扩展,带有SCR注释的xml表达式。在这一点上,Java类中的SCR注释是无关的,还是OSGi将使用此XML来查找带有注释的类?我猜如果我使用iPojo,这个XML会被ipojoxml取代吗?

scrinfo.xml这是serviceComponents.xml的副本,只向每个节点添加Private="false"

元类型。xml这看起来像其他生成的xml,但没有使用SCR名称空间。

libs我猜这些是我的bundle的私有依赖项,不向html" target="_blank">系统的其余部分公开。

我不喜欢这是一个令人费解的问题,但我似乎找不到一个关于ApacheFelix的OSGi实现在寻找什么,以及一种技术在哪里结束,另一种技术在哪里开始的可靠图片。如果某个地方有一个很好的图表显示了重叠,那将是很有帮助的,或者如果有人可以将它缩小到一个特定的推荐堆栈,这样我就可以在整理技术细节时加上一些遮罩,那将是非常好的。

共有1个答案

陈泰宁
2023-03-14

除非你有合理的理由担心一些额外的字节,否则我不会太担心Maven插件在你的bundle jar中放了什么。

从您的AFAICS列表中,所有文件都有一个很好的理由出现在那里,除了lib下的jar之外,我假设maven bundle插件已经包含了这些jar,以嵌入这些依赖项。通常最好让您的捆绑包从其他捆绑包导入这些包,这样它们就可以共享,而不仅仅是由您的捆绑包使用。

如果您使用ApacheSling,您可以以Sling代码库中/bundles下的几乎所有bundle为例,它们是根据公认的最佳实践构建的。Sling代码库确实使用ServiceTracker、白板模式和许多声明性服务,以及构建时由Maven插件执行的引擎盖下的BND。

我自己也没用过iPojo,我想它会和Sling配合得很好,但我们还没有看到Sling本身有这样的需求。

我不喜欢在OSGi应用程序中使用Spring,似乎有些人已经成功地做到了这一点,但与普通的声明性服务相比,这是一个附加层,没有带来太多价值。

 类似资料:
  • 我试图在Felix中添加一个新的OSGI包(没有Karaf)作为ActiveMQ客户端(消息发送方)。 ActiveMQ客户端在非OSGI环境中运行良好。但当我在Felix中使用相同的代码(稍加修改)时,它会抛出以下错误: org.osgi.framework.捆绑异常:无法解决com.packtpub.felix.bookshelf-库存-impl-mock[7](R 7.3):缺少需求[com

  • 我是OSGi的新手,很难将包包含到我的Maven项目中。 我使用mave-bundle-plugin创建了一个API包和一个实现包。在我的主要项目(一个Maven项目)中,我试图使用Felix框架从ServiceTracker获得已实现包的服务。当我最终尝试将获得的服务强制转换为正确的类型时,我会收到一个ClassCastException。 Maven使用以下清单文件创建了两个jar文件: 在我

  • 使用1.01.0等捆绑版本合法吗?找不到有关如何工作的任何信息。我使用OSGI的Apache Felix实现。

  • 我是OSGi的新手。我正在使用Apache Felix。我已经构建了一个捆绑包,并且具有依赖性。当我尝试使用启动它会给我这个错误。 org . OSGi . framework . bundle exception:无法解析lk . ucsc . research . belly runner[20](R 20.0):缺失需求[lk . ucsc . research . belly runner

  • 我正在开发一个OSGi应用程序(带有felix scr注释),它公开了一个服务。服务通过传递字符串值向外部api注册。 服务使用上面的一段代码来注册多个值的侦听器“SCHMA1”、“SCHMA1”、“SCHMA3”...我计划在各种捆绑包中重用此服务。但是我想只听ScheMA1的变化,而不是全部。 @参考(name="ServiceListener",策略=Reource策略。动态,基数=参考基数

  • 我的问题在于在前端包中使用/消费来自下游节点包的服务(例如osgi-mobile使用/消费来自osgi-downstreamnode1的服务)。 我目前正在Eclipse Mars中构建它们,由于没有将整个osgi-downstreamnode1包打包到一个JAR中,并将其导入osgi-mobile包,所以我似乎不知道如何在Eclipse中引用这些包,以及如何让osgi-mobile包在运行时调用