当前位置: 首页 > 面试题库 >

osgi应用程序中非osgi库的用法

墨翔宇
2023-03-14
问题内容

是否可以在OSGi应用程序中使用非osgi库?

例如,我正在开发一个基于语义的搜索引擎,并且正在为其使用第三方自然语言处理库(http://wiki.opencog.org/w/RelEx_Dependency_Relationship_Extractor)。

是否可以在OSGi应用程序中连接不支持OSGi(作为几个jar文件)的库?


问题答案:

如先前答案中所写,如果要在包中使用其他库,则有两个选择:

  1. 将库jar嵌入将在其中使用的捆绑软件中,
  2. 从库中创建有效的OSGi捆绑包。

一种方法 比较简单,因为您只需要将库jar(及其所有依赖项)复制到包(例如,复制到根目录)中,然后将它们添加到中的Bundle-Classpath元素中MANIFEST.MF(请参见此处)。但是,在执行此操作时,您必须记住,此添加的库仅在嵌入它的捆绑包中才可见(因此,库重用受到限制)。您总是可以从该库中将包添加到Export- package元素中,MANIFEST.MF以使其对其他捆绑包可见,但这远不是优雅的解决方案(但是它将起作用)。

为了使其对其他捆绑包可见,您应该使用 第二种方法
,即从库中创建OSGi捆绑包(有一些工具可以在Eclipse中帮助您做到这一点)。但是,对于更复杂的库,此方法可能会更困难(由于OSGi中的依赖关系和特定的类加载方法)。

因此,如果您只想在一个捆绑软件中使用该库,我建议您使用第一种方法(易于实现)。如果要在应用程序的许多捆绑软件中使用此库,则应考虑第二种方法。



 类似资料:
  • 我需要创建和部署一个应用程序到Karaf。但是我需要使用camel组件和java组件(简单的spring bean)。流程应如下:

  • 我们面临的最大问题是,我们无法找出如何构造项目C,以使其在项目A和B中都能正常工作。在项目A中,我们希望maven能像往常一样工作,并根据需要降低依赖项。但我们也希望在项目B(也许结合Nexus+Tycho??)中实现该功能。 我们应该如何解决这个问题。我还没有找到一个好的解决办法如何做这件事。我已经在maven中尝试了apache felix捆绑插件,但不能让它像我想要的那样工作。这是正确的解决

  • 问题内容: 我一直在寻找创建模块化Web应用程序的解决方案,该模块是模块化的,即用户可以以简单jar的形式提供自己的插件,然后将其自身的数据提供给我的Web应用程序,而我的webapp将负责用于显示它。 现在的问题是,我希望我的Web应用程序尽可能通用,而不依赖于j2ee Web容器来支持任何内容。即,我不能依靠我的Web容器来提供osgi支持并将Web应用程序作为osgi捆绑包本身部署(这确实使

  • 问题内容: 是否可以在现有的Java Apache Tomcat项目中引入osgi-equinox?据我了解,OSGI必须在某种“容器”中运行。我将如何整合它? 我还使用Jersey来获取RESTful资源。 问题答案: 在此桥模型中,安装了一个特殊的servlet,Tomcat调用该servlet来处理请求。OSGi运行时是从该servlet内生成的,但是OSGi运行时本身(例如,春分点)与HT

  • 问题内容: 通过不将数十个JAR依赖项包装到lib目录中,OSGi似乎具有一个小的可部署工件的巨大好处。但是,我找不到任何能告诉我一种简单,可靠的方式来将依赖项部署到容器的方法。例如,我有一个使用CXF和几个Spring子项目的应用程序。如果需要将此应用程序部署到新的Glassfish服务器上,那么最好的方法是确保安装所有依赖项? 我正在使用Maven, 似乎 可以使用某种方法来查看META-IN

  • 在独立AEM安装中,felix OSGi容器是否存在于jetty servlet容器中?或者Jetty服务器是作为捆绑包安装在Felix OSGi容器中的? AEM启动时,哪一个将首先启动? 对于基于战争的安装,这将如何改变? 根据这个答案,两者都是可能的。但我想知道AEM采用哪种方法。