在我的团队中,我们正在开发 Web 应用程序的 Java 后端。我们使用 OSGi。
到目前为止,在最初的开发阶段为了简化事情,我们使用 Jetty 作为 servlet 容器,为了部署到测试服务器,我们简单地导出了我们的 eclipse 产品(所有东西都捆绑在一起)并运行相应的 .exe 文件。
我们使用 OSGi 是为了模块化和解耦。在这个特定场景中,我们对动态安装/卸载捆绑包不感兴趣,因此 Eclipse 产品将所有内容捆绑在一起并一次性部署它非常方便。
现在我们想从 Jetty 迁移到 GlassFish,这意味着我们需要以不同的方式打包我们的包。据我所知,WAB 对我们来说是正确的。例如看到这个:
基本上,[WAB 是] 带有 OSGi 捆绑清单的 Web 应用程序。因此,整个 Web 应用程序可以作为单个 OSGi 包部署在任何支持 WAB 的框架上。从技术上讲,bundle 可以作为 Web 应用程序部署到 Servlet 容器。但它可以访问 BundleContext。这允许 Web 应用程序与在同一框架中运行的其他包或 Web 应用程序进行互操作。
https://stackoverflow.com/a/11345694/285091
理想情况下,我们希望转到我们的 .product 文件(或启动配置)并从那里导出 WAB,因为我们已经拥有所有必要的捆绑包和适当的设置(自动启动设置和启动级别)。然而,这似乎是不可能的——是吗?
请注意,获取“根”捆绑包并仅打包它及其依赖项不会完成这项工作,因为按照该过程不会打包其他捆绑包。例如,在我的工作区中,我有:
- com.example.root
- com.example.something
- com.example.something.impl.a
- com.example.something.impl.b
在哪里:
com.example.something
是一个包含 2 个实现的 API 包:com.example.something.impl.a
com.example.something.impl.b
com.example.root
取决于com.example.something
但不取决于它的任何实现- 我们真的跑了
com.example.something.impl.b
,从来没有com.example.something.impl.a
如果我们尝试只打包root
及其依赖项,我们会错过impl.b
所以,基本上:假设我们已经有一个启动配置/eclipse产品,其中包含我们想要为我们的服务器端应用程序设置的确切包设置,有没有办法产生相应的WAB?如果没有任何直接的方法,并且考虑到我们不使用 maven(排除了maven-bundle-plugin),那么接下来最好的方法是什么?