Osgi 捆绑包的部署顺序

Osgi 捆绑包的部署顺序,osgi,apache-felix,apache-karaf,blueprint-osgi,Osgi,Apache Felix,Apache Karaf,Blueprint Osgi,我有一个关于OSGI捆绑包部署的问题 我有7个捆绑包,我需要按照严格的顺序进行部署,否则我不会发现类发现错误。捆绑包的一部分用作静态库,另一部分用于导出OSGI服务 在OSGI应用程序中,这个问题通常是如何解决的?这个问题是通过不解决它来解决的(至少,不是以您要求的方式) 也就是说:没有必须严格按照顺序安装/启动的捆绑包!这意味着捆绑包的设计非常糟糕。相反,请更改捆绑包,以便它们可以按任意顺序启动 如果您对此有困难,请修改您的问题,以便我们了解您为什么认为需要开始订购。我同意,正如尼尔·巴特利特

我有一个关于OSGI捆绑包部署的问题

我有7个捆绑包,我需要按照严格的顺序进行部署,否则我不会发现类发现错误。捆绑包的一部分用作静态库,另一部分用于导出OSGI服务


在OSGI应用程序中,这个问题通常是如何解决的?

这个问题是通过不解决它来解决的(至少,不是以您要求的方式)

也就是说:没有必须严格按照顺序安装/启动的捆绑包!这意味着捆绑包的设计非常糟糕。相反,请更改捆绑包,以便它们可以按任意顺序启动


如果您对此有困难,请修改您的问题,以便我们了解您为什么认为需要开始订购。

我同意,正如尼尔·巴特利特所提到的,最好的方法是避免订购。但是,有时需要对捆绑包的开头进行排序。即使使用Equinox或Felix,您也可以使用它。它将确保您的捆绑包以特定的顺序开始

“开始级别与每个捆绑包相关联。开始级别是一个正整数值,用于控制捆绑包的激活/启动顺序。启动级别低的捆绑包在启动级别高的捆绑包之前启动。因此,启动级别为1的bundle首先启动,属于内核的bundle的启动级别往往较低,因为它们为运行大多数其他bundle提供了先决条件。“-


希望能有所帮助。

如果我正确理解了您的问题,那么只需提供正确的依赖项链,由OSGi解决即可。
您的库应该导出服务将导入的包

如果BundleA需要来自BundleBOtherBundle的类,那么在所有bundle的MANIFEST.MF中添加和元数据就足够了

BundleAMANIFEST.MF

导入包:my.required.Package.from.b,other.Package.in.b,other.Package

BundleBMANIFEST.MF

导出包:my.required.Package.from.b,other.Package.in.b

OtherBundleMANIFEST.MF

导出包:other.Package

然后安装所有捆绑包,它们将处于
INSTALLED
状态。启动主捆绑包(本例中为BundleA)。 OSGi将解析所有依赖项(注意不要有循环),bundle将进入
RESOLVED
状态(依赖项可用),然后进入
ACTIVE

您不需要手动添加这些依赖项,像这样的工具可以轻松配置


这个问题也可能有用。

使用启动级别并不能防止出现问题。启动级别内的启动顺序未定义,不能中断循环。