Osgi 捆绑包的部署顺序
我有一个关于OSGI捆绑包部署的问题 我有7个捆绑包,我需要按照严格的顺序进行部署,否则我不会发现类发现错误。捆绑包的一部分用作静态库,另一部分用于导出OSGI服务Osgi 捆绑包的部署顺序,osgi,apache-felix,apache-karaf,blueprint-osgi,Osgi,Apache Felix,Apache Karaf,Blueprint Osgi,我有一个关于OSGI捆绑包部署的问题 我有7个捆绑包,我需要按照严格的顺序进行部署,否则我不会发现类发现错误。捆绑包的一部分用作静态库,另一部分用于导出OSGI服务 在OSGI应用程序中,这个问题通常是如何解决的?这个问题是通过不解决它来解决的(至少,不是以您要求的方式) 也就是说:没有必须严格按照顺序安装/启动的捆绑包!这意味着捆绑包的设计非常糟糕。相反,请更改捆绑包,以便它们可以按任意顺序启动 如果您对此有困难,请修改您的问题,以便我们了解您为什么认为需要开始订购。我同意,正如尼尔·巴特利特
在OSGI应用程序中,这个问题通常是如何解决的?这个问题是通过不解决它来解决的(至少,不是以您要求的方式) 也就是说:没有必须严格按照顺序安装/启动的捆绑包!这意味着捆绑包的设计非常糟糕。相反,请更改捆绑包,以便它们可以按任意顺序启动
如果您对此有困难,请修改您的问题,以便我们了解您为什么认为需要开始订购。我同意,正如尼尔·巴特利特所提到的,最好的方法是避免订购。但是,有时需要对捆绑包的开头进行排序。即使使用Equinox或Felix,您也可以使用它。它将确保您的捆绑包以特定的顺序开始 “开始级别与每个捆绑包相关联。开始级别是一个正整数值,用于控制捆绑包的激活/启动顺序。启动级别低的捆绑包在启动级别高的捆绑包之前启动。因此,启动级别为1的bundle首先启动,属于内核的bundle的启动级别往往较低,因为它们为运行大多数其他bundle提供了先决条件。“-
希望能有所帮助。如果我正确理解了您的问题,那么只需提供正确的依赖项链,由OSGi解决即可。
您的库应该导出服务将导入的包 如果BundleA需要来自BundleB和OtherBundle的类,那么在所有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
您不需要手动添加这些依赖项,像这样的工具可以轻松配置
这个问题也可能有用。使用启动级别并不能防止出现问题。启动级别内的启动顺序未定义,不能中断循环。