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 wrap
converter,例如 here)
【讨论】:
以上是关于OSGI - 处理 3rd 方 JAR 及其依赖项的主要内容,如果未能解决你的问题,请参考以下文章
如何在操场上安装 3rd 方依赖项(如 Alamofire)
在集成 Maven、Tycho 和 Eclipse 时处理非 OSGi 依赖项
使用 Gradle 创建带有依赖 Jar 的 Osgi Bundle