gpt4 book ai didi

java - 在 Karaf 中将第 3 方 jar 作为 OSGI 包获取时遇到问题

转载 作者:行者123 更新时间:2023-12-01 12:46:06 30 4
gpt4 key购买 nike

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

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

我做了更多挖掘,解压了 jar,第 3 方 jar 的 list 如下:

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].

我认为这可能与春分与菲利克斯有关?我只是使用默认的 Karaf 设置并使用内置的 Netbeans Maven 项目创建 bundle ,并且对 OSGI 世界还比较陌生。在大多数情况下,我可以启动并运行 bundle ,并为应用程序构建一个基本集合,但是这个 bundle 取决于是否能够使用这个库,而我正在努力寻找一种让它工作的方法。我想知道是否有一种方法可以解决 jar 的所有链接依赖项,或者以某种方式删除依赖于 eclipse 的任何内容?我想知道这是否只是与插件相关的部分,对于我正在寻找的连接来说不是必需的。

感谢您的任何想法。

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

该 jar 是由供应商提供的,但来自现已不复存在的供应商。我不确定是否可以提供供应商详细信息,因此我将在此处隐藏具体的公司信息。因此该 jar 被命名为“com.bigcompany.product.productbeans_4.3.1.jar”。 jar 的完整 list 如下所示:

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 相对轻松,但是将 jar 放入 Karaf 中它仍然没有出现在列表中。我尝试解压缩 jar,修改 list 以删除 Require-Bundle 和 Eclipse-Autostart 行,重新打包并尝试安装它 - 那时它出现了,但我想要这个库的包仍然提示缺少需求 'com. bigcompany.product.productbeans'。

从那里,我尝试重新部署尝试导入第 3 方软件包的 bundle ,当我尝试在上面安装我的功能文件时, 提示缺少约束 - 是否有必需的顺序功能文件中的 bundle ?

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

最佳答案

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

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

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

然后尝试再次部署您的 bundle (首先不添加其他依赖项)。

关于java - 在 Karaf 中将第 3 方 jar 作为 OSGI 包获取时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24689381/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com