我是 OSGI 开发的新手,正在努力了解如何最好地处理依赖的 JAR。
即,如果我正在创建一个捆绑包,我可能需要使用一些第 3 方 JAR。当我创建我的包 JAR 以部署到 OSGI 时,显然这些 3rd 方 JAR 不包括在内,因此包将不会运行。
我知道一种选择是将这些 JAR 转换为捆绑包并将它们部署到 OSGI 容器。当我捆绑并尝试部署第三方 jar 时,它会为他们自己的依赖 jar 引发错误,并且这些依赖是无穷无尽的,无法实现。
什么是最好的解决方案?
——阿努拉格
如果您是 osgi 的初学者,那么我不建议您自己捆绑更大的库。通常不仅需要定义一些导入和导出标头,而且会变得非常困难。幸运的是,许多库都以捆绑包的形式提供。
如果原始 lobs 还不是捆绑包,那么您可以在 maven Central 中搜索来自 servicemix 捆绑包的捆绑版本。
使用 apache karaf 通常也有很大帮助。许多库(如 activemq、cxf、camel、openjpa、...
在最坏的情况下,您可以将 lib 和所有 deps 嵌入到您自己的 jar 中。如果您尝试在包之间共享一些类,这往往会导致类加载问题。
你的问题是什么库?
最后我解决了第三方 jar 问题,实际上我伪造了在我的 POM.xml 文件中添加以下标签 <_exportcontents>*
我的问题已经解决,感谢大家的支持并给了我宝贵的线索。
您提到的许多库(log4j、quartz、dom4j)已经被 Springsource 转换为 OSGi 包。您可以在Springsource Enterprise Bundle Repository中找到它们。所有 Hibernate 库 > 4.2 也是 osgified。
你有三个选择:
Bundle-Classpath
元素引用它们MANIFEST.MF
)bnd wrap
转换器,此处为示例)