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

在Karaf中将第三方jar用作OSGI捆绑包时遇到麻烦

薄烨
2023-03-14
Require-Bundle: org.eclipse.core.runtime

于是我就开始了实现这些依赖的“兔子洞”。基于maven页面,我将features.xml文件放在一起:

<features xmlns="http://karaf.apache.org/xmlns/features/v1.0.0">
    <feature name='custom_deps' version='1.0'>  
        <bundle>mvn:org.eclipse.equinox/log/1.0.100-v20070226</bundle>
        <bundle>mvn:org.eclipse/osgi/3.5.0.v20090520</bundle>
        <bundle>mvn:org.eclipse.core/contenttype/3.2.100-v20070319</bundle>
        <bundle>mvn:org.eclipse.core/jobs/3.3.0-v20070423</bundle>
        <bundle>mvn:org.eclipse.core.runtime.compatibility/auth/3.2.100-v20070502</bundle>
        <bundle>mvn:org.eclipse.equinox/app/1.3.100-v20130327-1442</bundle>
        <bundle>mvn:org.eclipse.equinox/common/3.6.200-v20130402-1505</bundle>
        <bundle>mvn:org.eclipse.equinox/preferences/3.5.100-v20130422-1538</bundle>
        <bundle>mvn:org.eclipse.equinox/registry/3.5.301-v20130717-1549</bundle>    
        <bundle>mvn:org.eclipse.core/runtime/3.3.100-v20070530</bundle>
    </feature>
</features>

现在,当我尝试安装它时,我得到:

karaf@root()> feature:install custom_deps
Error executing command: Could not start bundle mvn:org.eclipse/osgi/3.5.0.v2009
0520 in feature(s) custom_deps-1.0: Activator start error in bundle org.eclips
e.osgi [256].

我觉得这可能和equinox vs Felix有关?我只是使用默认的Karaf设置,并使用内置的Netbeans Maven项目创建包,对于OSGI世界来说,我还是比较新的。在大多数情况下,我可以启动和运行bundle,并为一个应用程序建立了一个基本的集合,但这一个bundle依赖于能够使用这个库,我正在努力找到一种使其工作的方法。我想知道是否有一种方法可以解析jar的所有链接依赖项,或者以某种方式去除依赖于Eclipse的任何东西?我想知道它是否只是插件相关的部分,而不是必要的连接,我正在寻找。

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Productbeans Plug-in
Bundle-SymbolicName: com.bigcompany.product.productbeans
Bundle-Version: 4.3.1
Bundle-Activator: com.bigcompany.product.productbeans.ProductbeansPlugin
Bundle-Vendor: BIGCOMPANY
Bundle-Localization: plugin
Require-Bundle: org.eclipse.core.runtime
Eclipse-AutoStart: true
Export-Package: com.bigcompany.product.productbeans

在卡拉夫切换到Equinox相对来说没什么痛苦,但是把罐子扔进卡拉夫仍然它仍然没有出现在列表中。我试着解压缩jar,修改清单以删除Require-Bundle和Eclipse-Autostart行,重新打包并尝试安装--这时它出现了,但我想要这个库的包仍然抱怨缺少需求'com.bigcompany.product.ProductBeans'。

从那里我尝试重新部署我的包,它试图导入第三方包,而当我尝试安装我的功能文件上面,它抱怨缺少约束-功能文件中有一个所需的包的顺序吗?

我想我最终希望的是,有没有一种权威的方法来嵌入或包含一个jar(或者它包含.class文件?)变成一个需要它们的包,并且让它正常工作?我使用maven shade插件尝试了Embed-Dependency、Bundle-Classpath(尽管我不确定语法或位置是否正确?),结果要么我的bundle说它缺少第三方包,要么它说它找不到eclipse依赖项。如果我有一个非OSGi项目,则maven依赖项不会列出或包括任何与Eclipse相关的依赖项。如果需要,我可以包括我的POM片段或其他东西。

共有1个答案

谢诚
2023-03-14

基本上,Require-Bundle说它需要equinox bundle。按照标准,Karaf使用Apache felix作为OSGi运行时。由于equinox也是一个运行时,您不能简单地将其安装在Felix中。

相反,你只需切换你的卡拉芙使用equinox而不是Felix。

编辑etc/config.properties并设置karaf.framework=equinox

 类似资料:
  • 问题内容: 我才刚刚开始OSGI开发,并且正在努力了解如何最好地处理依赖的JAR。 即,如果我要创建捆绑包,则很有可能需要使用一些第三方JAR。当我创建要部署到OSGI的捆绑软件JAR时,显然不包括这些第三方JAR,因此捆绑软件将无法运行。 我知道一种选择是将这些JAR打包成束,然后将它们部署到OSGI容器中。但是,如果只需要一个捆绑包使用它们,这似乎并不理想。 最好的解决方案是什么?可以将JAR

  • 在感觉自己已经掌握了如何使用OSGi之后,我尝试向我的应用程序添加第三方依赖,特别是log4j2,该应用程序使用ApacheFelix并与maven捆绑插件捆绑。不幸的是,我似乎陷入了依赖地狱。 我尝试过使用许多maven捆绑包策略,如导入包,嵌入依赖,wrapImportPackage,Embed-Transitive,以及设置特定的版本号,仅举几例。以下是我的pom在这个插件中的样子: 我觉得

  • 我正在将我的spring-java项目转移到OSGi。 我有一些依赖项,这些依赖项在spring ebr repo或maven repo中不能作为包提供。处理它们的最佳方法是什么? null

  • 我们使用Karaf-4作为OSGI容器。我们有几个与一个功能关联的捆绑包。当某个功能中的任何捆绑包失败时,我们希望以编程方式进行识别。我们尝试了 BundleTracker 和 BundleListener,但是当捆绑包在“GracePeriod”状态下等待失败时,我们不会收到通知。 我们可以在karaf控制台中使用“list”命令查看故障包的状态。我们希望通过通知以编程方式实现这一点,而不是在k

  • 我们将这个库用于另一个项目,我们现在也在Xamarin中开发。目前,我们需要添加这两个库(用于ExoPlayer的my.aar和.jar)。老实说,这有点烦人,我很想把我的。Aar放进去,然后走。 所以两个问题: 有没有一种方法可以使用gradle和其他东西将ExoPlayer捆绑到我的。aar中?(我是个初学者,请仔细) 我意识到这可能不是最好的做法(依赖应该由应用程序管理,诸如此类),但实际上

  • 我正在尝试部署我现有的项目,该项目在ApacheKaraf4.2.1(运行时)中内置了SpringDM(OSGI)1.2.1,但没有正确安装。ApacheKaraf4.2.1支持SpringDM(OSGI)1.2.1吗?我知道spring dm(OSGI)1.2.1不再正式支持spring,它已作为eclipse Gemini项目的名称转移到eclipse。我已经浏览了下面提到的一些链接:Spri