我在我的应用程序中使用了一些现成的 OSGi 包,并希望将它们与尚不兼容 OSGi 的其他包重新打包到一个新包中。
典型的例子是 EclipseLink,它可以作为几个 OSGi 包提供,其中大部分是可选的,具体取决于您想要做什么。我想选择那些与我相关的包,添加数据库驱动程序(例如 MySQl JDBC 连接器)并将它们重新打包成一个更易于部署的新包。
我正在使用 Apache Felix 的 maven-bundle-plugin。我建立了一个没有源代码的新Maven项目,添加了四个eclipselink和mysql连接器作为依赖项并尝试了以下内容:
- 使用
<Embed-Dependency>
and<Embed-Transitive>
指令将所有依赖项包含在一个包中。问题:当插件重写清单时,需要来自 eclipselink 包的可选依赖项(例如 javax.mail.internet)。原始捆绑包在清单中包含“分辨率=可选”,因此没有它也可以正常工作。 - 使用
manifest
插件和jar-with-dependencies
程序集的目标,但这给了我基本相同的结果,只是需要更多的工作。 - 使用了
bundleall
插件的目标,这不是我想要的,因为它再次创建了单独的包。更糟糕的是,因为现在这些包里面没有它们的依赖项。
我将面临 Struts 2 的类似问题。我不会对此感到痴迷,只是使用一大堆单独的第三方捆绑包,但如果我可以更整齐地打包它们,我真的很喜欢至。我知道 OSGi 的一个要点是模块化,因此创建大包会破坏这一点,但我觉得如果您的模块无论如何都是紧密耦合的,那么您不妨将它们放入单个包中。
当然,我可以手动调整清单,但我绝对不想这样做。