0

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

无论如何,我正在尝试使用 Netbeans 7.4 和 Karaf 3.0.1 开发一个公开这个 jar 功能的包。只是试图将 jar 安装到 Karaf 中是行不通的——如果我将它放到部署文件夹中,它甚至不会出现在列表中,就像它不将其识别为 OSGI 包一样。我在 Netbeans 中创建了一个新的 OSGI Maven 包,将 jar 添加为依赖项,并尝试了各种着色方式,包括 in Bundle-ClassPath, Export-Package,但没有成功。在某一时刻,我以为我可以正常工作,但 Karaf 抱怨需要一些 Eclipse 需求。

我做了更多的挖掘,解压缩了罐子,第 3 方罐子的清单有这个:

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 的任何内容?我想知道它是否只是与我正在寻找的连接无关的插件相关部分。

感谢您的任何想法。

编辑:添加有关 3rd 方 jar 的更多信息

jar 是供应商提供的,但来自一个现已不复存在的供应商。我不确定是否可以提供供应商详细信息,因此我将在此处隐藏特定的公司信息。所以这个jar被命名为“com.bigcompany.product.productbeans_4.3.1.jar”。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

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

从那里我尝试重新部署尝试导入第 3 方包的捆绑包,并且当我尝试安装上面的功能文件抱怨缺少约束 - 功能文件中的捆绑包是否有必需的顺序?

我认为最终我希望的是有一种权威的方法可以将一个 jar(或者它包含 .class 文件?)嵌入或包含到一个需要它们的包中,并让它正常工作?我已经尝试了 Embed-Dependency,Bundle-Classpath(尽管我不确定我的语法或位置是否正确?),使用 maven shade 插件,或者我到达我的包说它缺少第 3 方包的地方,或者如果它没有给出它说它找不到 Eclipse 依赖项。如果我有一个非 OSGI 项目,maven 依赖项不会列出或包含任何与 eclipse 相关的依赖项。如果需要,我可以包含我的 POM 的片段或其他内容。

4

1 回答 1

1

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

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

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

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

于 2014-07-11T06:30:50.413 回答