OSGI Bundle Repository(OBR)功能在Apache Felix的OBR解析期间发生冲突

时间:2013-11-07 06:47:17

标签: osgi apache-felix maven-bundle-plugin obr bndtools

我正在调查在Felix中使用OBR作为大型应用程序的部署选项,但遇到了一些初步障碍。

采取的方法

  1. 我创建了一个新的jar,其中manifest.mf列出了每个应用程序依赖项(基本上是手动部署中的所有内容),直到第三方库,在“Require-Bundle:”部分。我的目的是首先声明所有内容,然后将其配对并通过OBR解析第三方包。
  2. 使用maven-bundle-plugin将我的本地.m2存储库索引为OBR

    mvn org.apache.felix:maven-bundle-plugin:2.3.7:index
    
  3. 启动了Apache Felix并添加了OBR集合

    obr:repos add file:///~/.m2/repository/repository.xml
    
  4. 尝试部署包含整个应用程序的bundle依赖列表的jar

    obr:deploy --required-only --start  com.conorjgall.application.definition
    
  5. 问题

    由于使用了Spring的依赖注入,javax.inject中的一些包中有一个包需求。但是,在OBR中,有多个捆绑广告宣传javax.inject的功能。它在Spring捆绑包和Google Guice捆绑包中都可用。不幸的是,OBR解析器似乎选择了Guice implmentation,这阻止了我的应用程序启动。

    解决方法

    如果我从OBR索引中删除Guice库,则OBR解析器永远不会找到它,因此使用了Spring实现,并且应用程序启动时没有问题。

    问题

    1. 我在高级应用程序jar中列出了所有依赖项,包括包含Spring的javax.inject实现的依赖项。 当我明确告诉它部署已经提供它的捆绑包时,为什么Felix的OBR解析器试图解决包需求?当我尝试以这种方式部署(使用单个捆绑包)时,OBR解决方案是否以深度优先的方式发生?
    2. 我很好奇通常用于创建/维护第三方库的OBR存储库的策略是什么,以确保没有包功能冲突。是否应创建和维护较小的OBR存储库索引,那些仅包含应用程序依赖性且没有包功能冲突的索引?是否有可以提供帮助的maven插件?
    3. 更广泛的社区如何通过OBR一次部署> 100个捆绑包?也许有比父包解决方案更好的选择。

0 个答案:

没有答案