我正在调查在 Felix 中使用 OBR 作为大型应用程序的部署选项,但遇到了一些初始障碍。
采取的方法
- 我创建了一个带有 manifest.mf 的新 jar,其中列出了“Require-Bundle:”部分中的每个应用程序依赖项(基本上是手动部署中的所有内容),一直到第三方库。我的意图是首先声明所有内容,然后将其配对并通过 OBR 解析第三方捆绑包
使用 maven-bundle-plugin 将我的本地 .m2 存储库索引为 OBR
mvn org.apache.felix:maven-bundle-plugin:2.3.7:index
启动 Apache Felix 并添加 OBR 存储库
obr:repos add file:///~/.m2/repository/repository.xml
尝试部署包含整个应用程序包依赖项列表的 jar
obr:deploy --required-only --start com.conorjgall.application.definition
问题
由于使用了 Spring 的依赖注入,javax.inject 上的某些包中有包要求。但是,在 OBR 中,有不止一个捆绑包宣传 javax.inject 的功能。它在 Spring 捆绑包和 Google Guice 捆绑包中都可用。不幸的是,OBR 解析器似乎选择了阻止我的应用程序启动的 Guice 实现。
解决方法
如果我从 OBR 索引中删除 Guice 库,则 OBR 解析器永远不会找到它,因此使用 Spring 实现,并且应用程序启动没有问题。
问题
- 我列出了高级应用程序 jar 中的所有依赖项,包括包含 Spring 的 javax.inject 实现的依赖项。为什么当我明确告诉 Felix 的 OBR 解析器部署一个已经提供它的包时,它会尝试解决包需求?当我尝试以这种方式部署(使用单个捆绑包)时,OBR 解析是否以深度优先的方式发生?
- 我很好奇通常用于创建/维护第三方库的 OBR 存储库以确保没有包功能冲突的策略是什么。是否应该创建和维护较小的 OBR 存储库索引,那些仅包含应用程序依赖项且没有包能力冲突的索引?是否有可以提供帮助的 Maven 插件?
- 更广泛的社区如何通过 OBR 一次部署超过 100 个捆绑包?也许有比父捆绑解决方案更好的选择。