无法在Karaf中获得第三方jar作为OSGI包

时间:2014-07-11 02:54:25

标签: java osgi karaf

我有一个第三方jar,没有源,用于连接到专有数据库系统。我相信jar实际上是一个Eclipse插件;它取自该系统基于Eclipse的编辑器的一个lib文件夹。

无论如何,我正在尝试使用Netbeans 7.4和Karaf 3.0.1开发一个暴露这个jar功能的包。只是尝试将jar安装到Karaf中是行不通的 - 如果我将它放入deploy文件夹,它甚至不会出现在列表中,就像它不能将它识别为OSGI包一样。我在Netbeans中创建了一个新的OSGI Maven包,将jar添加为依赖项,并尝试了各种阴影,包括Bundle-ClassPathExport-Package,没有运气。有一次我认为我有它工作,但Karaf抱怨需要一些Eclipse要求。

我做了更多的挖掘,解压缩了罐子,第三方罐子的清单就是这样:

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世界来说还是比较新的。在大多数情况下,我可以启动并运行捆绑包,并为应用程序组合了一个基本集合,但这一个捆绑包取决于能够使用此库,我正在努力找到一种方法来使其工作。我想知道是否有办法解决jar的所有链接依赖关系,或者以某种方式删除依赖于eclipse的任何东西?我想知道它是否只是插件相关的部分,对我正在寻找的连接不是必需的。

感谢任何想法。

修改:添加有关第三方jar的更多信息

该jar是供应商提供的,但来自现已解散的供应商。我不确定是否可以提供供应商的详细信息,所以我会在这里掩盖具体的公司信息。因此jar被命名为“com.bigcompany.product.productbeans_4.3.1.jar”。罐子的完整清单看起来像这样:

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文件?)嵌入或包含在需要它们的包中,并使其正常工作?我已经尝试过Embed-Dependency,Bundle-Classpath(虽然我不确定我的语法或位置是否正确?),使用maven shade插件,要么我到达我的捆绑说它缺少第三方包,或者如果它没有说它说它找不到eclipse依赖项。如果我有一个非OSGI项目,maven依赖项不会列出或包含任何与eclipse相关的依赖项。如果需要,我可以包含我的POM的片段或其他内容。

1 个答案:

答案 0 :(得分:1)

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

相反,你只需将你的karaf切换为使用equinox而不是felix。

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

然后尝试再次部署您的包(首先没有其他依赖项)。

相关问题