我正在编写一个在 OSGI 环境中运行的应用程序。 现在我想提取一些代码并将其放入单独的包/jar 文件中,以便在其他应用程序(OSGI 或非 OSGI)中重用它。
我的目标是删除对 OSGI 环境类的任何依赖项,因为它还应该在不具有各种 OSGI 框架(例如 Equinox)的所有 jar 的其他应用程序中运行。但同时,如果应用程序是 OSGI 应用程序,我想在 OSGI 环境中注册 OSGI 服务。
我已经分离了代码,唯一剩下的依赖于 OSGI 的代码目前是我的 Activator 类,它将某些类注册为 OSGI 服务:
context.registerService(MyServiceInterface.class.getName(), new MyServiceImpl(), new Hashtable());
为了消除依赖性,我考虑以下几点:
- 我从我的bundle1中删除了Activator和OSGI依赖项
- 我创建了另一个bundle2,在其中移动激活器
最后我有了我的bundle1.jar,它只有一个Manifest.mf 文件来使其支持OSGI,但不再有依赖于OSGI 框架类的代码。 我有另一个包,它只属于我当前的应用程序,它导入bundle1.jar,并且唯一的目的是使用激活器在OSGI容器上注册MyService.class。
- 这种方法可以吗?还有其他最佳实践吗?
- 在 OSGI 环境中注册服务是好的做法还是主机应用程序始终应该负责?
最佳答案
为什么不将激活器类留在你的包中呢?当在非OSGi环境中运行时,激活器类将不会被调用。当在 OSGi 环境中运行时,它会。将 OSGi 依赖项与激活器隔离是一个很好的策略。
关于java - 构建一个可以在 OSGI 和非 OSGI 环境中工作的库的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12768989/