OSGI - 处理 3rd 方 JAR 及其依赖项

Posted

技术标签:

【中文标题】OSGI - 处理 3rd 方 JAR 及其依赖项【英文标题】:OSGI - handling 3rd party JARs and their dependencies 【发布时间】:2013-10-12 14:58:31 【问题描述】:

我是 OSGI 开发的新手,正在努力了解如何最好地处理依赖 JAR。

即如果我正在创建一个捆绑包,我可能需要使用一些 3rd 方 JAR。当我创建我的包 JAR 以部署到 OSGI 时,显然这些 3rd 方 JAR 不包括在内,因此包将不会运行。

我了解一种选择是将这些 JAR 转换为捆绑包并将它们部署到 OSGI 容器。当我捆绑并尝试部署第三方 jar 时,它会为他们自己的依赖 jar 引发错误,并且这些依赖是无穷无尽的,无法实现。

什么是最好的解决方案?

-- 阿努拉格

【问题讨论】:

【参考方案1】:

最后我解决了第三方 jar 问题,实际上我伪造了在我的 POM.xml 文件中添加以下标签 <_exportcontents>*

我的问题已经解决,感谢大家的支持和给我宝贵的线索。

【讨论】:

【参考方案2】:

如果您是 osgi 的初学者,那么我不建议您自己捆绑更大的库。通常不仅需要定义一些导入和导出标头,而且会变得非常困难。幸运的是,很多库都可以作为捆绑包使用。

如果原始 lobs 还不是一个捆绑包,那么您可以在 maven Central 中搜索来自 servicemix 捆绑包的捆绑版本。

使用 apache karaf 通常也有很大帮助。对于许多库,如 activemq、cxf、camel、openjpa、...

在最坏的情况下,您可以将 lib 和所有 deps 嵌入到您自己的 jar 中。如果您尝试在包之间共享一些类,这往往会导致类加载问题。

你的问题是什么库?

【讨论】:

【参考方案3】:

您提到的许多库(log4j、quartz、dom4j)已经被 Springsource 转换为 OSGi 包。您可以在Springsource Enterprise Bundle Repository 中找到它们。所有 Hibernate 库 > 4.2 也是 osgified。

【讨论】:

【参考方案4】:

你有三个选择:

    在一些预制捆绑包(Springsource Repository、Eclipse Orbit Repository 等)中查找库 将库作为外部库包含到您的包中(创建一个目录 lib,将您的 jar 文件复制到那里,并从 MANIFEST.MF 中的 Bundle-Classpath 元素引用它们) 将库转换为 OSGi 包(例如,使用 bnd wrapconverter,例如 here)

【讨论】:

以上是关于OSGI - 处理 3rd 方 JAR 及其依赖项的主要内容,如果未能解决你的问题,请参考以下文章

如何在操场上安装 3rd 方依赖项(如 Alamofire)

在集成 Maven、Tycho 和 Eclipse 时处理非 OSGi 依赖项

将 3rd 方依赖项直接保存到 Flutter 项目

使用 Gradle 创建带有依赖 Jar 的 Osgi Bundle

Android apk - 如何使用 gradle 从 3rd 方依赖项中排除 .so 文件

创建具有 3rd 方依赖项的可安装 Django 应用程序