【发布时间】:2019-11-03 23:36:43
【问题描述】:
我正在尝试将我的项目转换为 OSGI 应用程序。我几乎没有疑问。假设我的应用程序中的 ModuleA 依赖于外部 jars jarA 和 jarB。现在为了让 ModeuleA 运行,我使用 maven-bundle-plugin 的 embed-dependency 属性嵌入了两个 jar。 现在假设我有另一个模块 ModuleB,它也依赖于 jarA。所以这个模块也嵌入了jarA。我的项目最终将 jarA 嵌入了 2 次,这将不必要地增加项目的大小。
有没有办法告诉 OSGI 只加载一次 jarA 并将其提供给两个模块。
如果将这些 jar 转换为 OSGI 包是唯一的解决方案,我还有几个问题:
将 jar 转换为捆绑包的最简单方法是什么。 BND 工具看起来是个不错的解决方案,但我找不到关于它的适当文档。
jarA 也会有一些依赖的 jars。所以我还需要将所有依赖的 jar 转换为包。我的项目有 100 多个罐子。我怎样才能自动化这个过程。
提前致谢:)
【问题讨论】:
-
如果 >100 个 jars 是外部创建的依赖项(不是您自己的),其中很多可能已经是 OSGi 包。打开或解压它们(我发现 emacs 很方便),并在 META-INF/MANIFEST.MF 文件中查看 OSGi 标头。如果有 OSGi 头文件,则无需重新打包。
-
是的,他们中的大多数人都有。那么我们是否需要启动每个包(外部 jar),然后启动主包(这些 jar 的依赖项)?如果我们有嵌入的 jars,我们不需要启动这些包中的每一个
-
是的,它们应该以正确的顺序启动。首先是没有 deps 的包,最后是你的包。
标签: maven osgi apache-felix