Java 一旦解决了OSGI捆绑包的依赖关系,该捆绑包的依赖关系会发生什么变化

Java 一旦解决了OSGI捆绑包的依赖关系,该捆绑包的依赖关系会发生什么变化,java,dependencies,osgi,bundle,osgi-bundle,Java,Dependencies,Osgi,Bundle,Osgi Bundle,我有一个OSGI包A和包B。 束B依赖于束A 束B和束A均处于活动状态 现在我需要了解以下场景对Bundle B的影响 1我已停止捆绑A,捆绑B会发生什么情况 2我已卸载捆绑包A。捆绑包B会发生什么情况 3我已经停止了捆绑包A,然后我停止了捆绑包B,现在我正在尝试从已安装状态解析B 4我已经卸载了捆绑包A,然后我停止了捆绑包B,现在我正在尝试从已安装状态解析B 谁能回答这个问题 我已经在ApacheFelix控制台上试过了,在上面的任何场景中,我都看不到对B有任何影响 有人能帮我吗?影响如下:

我有一个OSGI包A和包B。 束B依赖于束A

束B和束A均处于活动状态

现在我需要了解以下场景对Bundle B的影响

1我已停止捆绑A,捆绑B会发生什么情况

2我已卸载捆绑包A。捆绑包B会发生什么情况

3我已经停止了捆绑包A,然后我停止了捆绑包B,现在我正在尝试从已安装状态解析B

4我已经卸载了捆绑包A,然后我停止了捆绑包B,现在我正在尝试从已安装状态解析B

谁能回答这个问题

我已经在ApacheFelix控制台上试过了,在上面的任何场景中,我都看不到对B有任何影响


有人能帮我吗?

影响如下:

停止与决心无关 在您进行刷新之前,B不会继续使用A导出的包 停止与决心无关 B不应该解析-除非另一个包能够提供B所依赖的包。 更新

在评论中,@Ngupta问,请分享一些解释,说明为什么B总是被解析,即使它所需要的包不再存在

我的回答:B将保持在已解析状态,即使您卸载其依赖项。但是,如果缺少依赖项,B将不会转换到已解析状态


您可以强制B重新解析,而此重新解析应该通过执行刷新失败,这是一个可以从Gogo shell执行的操作。事实上,在执行一系列安装、更新或删除操作后,您应该始终进行刷新。

最好的方法是在Apache servicemix中使用包含测试代码的2个捆绑包进行尝试。为了澄清,这些捆绑包是按顺序进行的吗?或者单独的场景,每一个都分别遵循前两句话中描述的状态?@Shinchan我已经尝试过了,但我始终认为这两种场景对B都没有影响,对此我没有解释。我正在找人来证实这一点。@JWoodchuck这些都是独立的独立场景。是的,在每种情况发生之前,前两种说法都是正确的。我发现这并没有发生在我身上。即使在第四个场景中,我的B也始终得到解决。另外,请您分享一些解释,说明为什么即使B所需的捆绑包不再存在,B也总是被解析。届时您需要提供更多信息。B对A的依赖性是什么样子的,你是如何卸载A的,卸载A后你对B做了什么,等等。特别是,你在4中对B所做的描述不清楚。您说过我停止了Bundle B,现在我正在尝试从已安装状态解析B。您是如何使B进入已安装状态的?仅仅停止它并不能实现这一点,因为停止与解析无关。至于你的问题:即使你卸载它的依赖项,B也将始终保持解析状态。但是,如果缺少依赖项,B将不会转换到已解析状态。您可以强制B重新解析,而这个重新解析应该通过刷新失败。因此,my B进入已安装状态,由于缺少依赖项而无法解析。