是否可以在带有扩展点的 OSGi 应用程序中同时运行两个版本的扩展?
这就是我想要完成的:
我有一个扩展点 Foo 和一个符号名称 Bar 和版本 1.0.0 的模块插入到扩展点并在模块 A 和模块 B 中运行(即实例化)。然后我安装一个新的带有错误修复、symbolicName Bar 和 1.0.1 版的扩展包。我只想在模块 B 中运行这个新版本,所以模块 A 仍然使用 Bar v1.0.0,模块 B 现在使用 Bar v1.0.1。
据我所见,这是不可能的,因为扩展需要是单例的,所以不能有相同符号名称的两个版本。所以我们当前的解决方案是让符号名称也包含版本:symbolicName Bar_1_0_0 和symbolicName Bar_1_0_1。这样做我们可以独立并同时运行每个模块中的每个版本,因为它们在技术上是不相关的包,只是碰巧插入到同一个扩展点。
但是,将版本放在符号名称中似乎是错误的做法。这可以在不更改符号名称的情况下完成吗?我错过了什么吗?