我正在编写一个在 OSGI 环境中运行的应用程序。现在我想提取一些代码并将其放在单独的 bundle/jar 文件中,以便在其他应用程序(OSGI 或非 OSGI)中重用它。
我的目标是删除对 OSGI 环境类的任何依赖项,因为它还应该在其他应用程序中运行,这些应用程序没有各种 OSGI 框架的所有 jar(例如 Equinox)。但同时,如果应用程序是 OSGI 应用程序,我想在 OSGI 环境中注册一个 OSGI 服务。
我已经分离了代码,目前唯一剩下的依赖于 OSGI 的代码是我的 Activator 类,它将一些类注册为 OSGI 服务:
context.registerService(MyServiceInterface.class.getName(), new MyServiceImpl(), new Hashtable());
为了消除依赖,我考虑了以下几点:
- 我从 bundle1 中删除了 Activator 和 OSGI 依赖项
- 我创建了另一个 bundle2,我在其中移动了 Activator
最后,我得到了我的 bundle1.jar,它只有一个 Manifest.mf 文件以使其支持 OSGI,但根据 OSGI 框架类,不再有代码。我有另一个包,它只属于我当前的应用程序,它导入 bundle1.jar 并且唯一的目的是使用激活器在 OSGI 容器上注册 MyService.class。
- 这种方法可以吗,还是有其他最佳实践?
- 在 OSGI 环境中注册服务是好的做法,还是主机应用程序始终应负责的事情?