“OSGi 方式”是开发包含离散的、连贯的功能块的单独包。有时这些包包含实用程序类,有时它们依赖于实用程序类并设置自己的 OSGi 服务。
另一方面,用户不太可能接触到捆绑软件。他们更关心应用程序,即执行任务或解决问题的软件。通常,应用程序将使用多个包(例如,通过 Import-Package 导入)来执行其任务。
在 OSGi 世界中形式化这种关系的最佳方式是什么?一个示例要求是向用户显示应用程序的当前版本号(不是捆绑包)一样简单。如何发现这个版本号?
Eclipse 有一个称为“功能”的概念,但这不是 OSGi 标准。
Peter Kriens写过关于 OSGi 应用程序的文章,他的文章很有道理。我从中得出的结论是,应用程序可以映射到捆绑包。只是捆绑包以某种方式使用了其他捆绑包。但是,如果要使用 Import-Package 创建应用程序包,从开发的角度来看,我不认为这是可行的。
一种方法可能是使用 Require-Bundle 并拥有自己的版本的“应用程序包”,但 Require-Bundle 在 OSGi 世界中是不受欢迎的。
然而,使用 Import-Package 来导入具有所需版本的所有所需包,给开发人员增加了很大的维护开销,我认为这是不可行的。每次进行最小的更改时,即使是实现包,也必须更新包版本,然后在“应用程序包”中更新对包版本的依赖关系。