OSGI - 处理第三方JAR及其依赖项

时间:2013-10-05 18:13:29

标签: java osgi

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

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

我知道一个选项是将这些JAR转换为捆绑包并将它们部署到OSGI容器中。当我捆绑并尝试部署第三方jar时,它会为自己的依赖jar抛出错误,这些依赖是无穷无尽的,无法实现。

最佳解决方案是什么?

- Anurag

4 个答案:

答案 0 :(得分:0)

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

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

使用apache karaf通常也是一个很大的帮助。有很多libs的预定义deps的karaf功能,如activemq,cxf,camel,openjpa,......

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

你的案子有什么问题?

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您有三种选择:

  1. 在一些预先制作的包中找到该库(Springsource RepositoryEclipse Orbit Repository等。)
  2. 将库作为外部库包含在捆绑包中(创建目录库,在那里复制jar文件,并从Bundle-Classpath中的MANIFEST.MF元素引用它们)
  3. 将库转换为OSGi包(例如使用bnd wrap转换器,例如here

答案 3 :(得分:0)

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

我的问题是解决,感谢大家的支持,并给我提供了宝贵的线索。