目前我正在使用osgi和karaf。
我的问题是没有“osgi ready”依赖项,这意味着一个jar还没有准备好作为一个bundle部署到karaf中。
我尝试了两种解决方案来处理这类问题:
我试图使用“Embed-Dependency”,其中包括jar 对项目的依赖......我不认为这可能是一个解决方案 因为当我试图嵌入jar时,它会要求我包含其他内容 第一个罐子依赖的罐子,依此类推......
我尝试使用bnd工具或来自eclipse项目的“来自现有JAR存档的插件”将无“osgi ready”jar转换为bundle。 这导致了相同的结果,每个jar都会调用另一个依赖它的jar ..
我不确定我是以错误的方式做到这一点还是确切地说是什么问题。 任何提示如何处理没有osgi准备好的依赖?
答案 0 :(得分:3)
最简单的方法是使用wrap:protocol自动创建一个jar。在幕后,它使用bnd来动态创建一个包。只需将wrap:包装到jar的mvn url中。
当您尝试使用bundle安装jar时:install -s wrap:mvn:... karaf会告诉您哪些导入的包丢失了。安装以相同方式提供这些包的jar。 jar的pom可以给你一个暗示缺失的东西。
如果您的初始罐子有很多依赖性,这可能意味着安装大量的罐子。
一旦你有一个可以一起安装的jar列表,你可以使用wrap协议创建一个功能,或者你可以在构建时从个人创建一个包。
无论如何你应该看一下servicemix bundles。它为许多库提供了OSGi就绪软件包。