gpt4 book ai didi

OSGI:只有在外部存在时才可以导入包,否则使用本地精简版?

转载 作者:行者123 更新时间:2023-12-01 22:44:28 24 4
gpt4 key购买 nike

我面临的问题是应用程序部署在由第三方维护的 OSGi 容器上。

我的包中有一些功能可以导入外部包,这些包可能可用也可能不可用。对于 bundle 不可用的情况,我的 bundle 中存在一个客户端 bundle (以帮助避免 ClassNotFound 异常)。在另一种情况下,当包存在时,应该导入包。

这有可能吗?

提前致谢。

最佳答案

情况

让我看看我是否正确理解了这个问题:假设我们正在谈论一些包 foo。如果您环境中的某个人导出了这个包,您希望完全导入那个包。

[someone-else] --exp--> foo <--imp-- [you]

如果没有人导出包,你自己有一个副本,在你所谓的“客户端包”中;我不太明白你的意思,但我想这意味着你想有条件地导出一些包,所以我们最终会遇到这种情况

[you] --exp--> foo
| ^
| |
-----imp------

所以,你会与自己建立联系。

我还得知您曾尝试自己导出 foo 包,但发现当您这样做时,您无法使用 foo 包中的类与其他包通信.

解决方案

如果上述情况正确,您可以使用默认的 OSGi 行为。您声明您同时导出和导入一个包,

Export-Package: foo
Import-Package: foo

您现在总是导出包,但 OSGi 解析机制将确保正确连接:

  • 如果有人已经导出了 foo,您将连接到该现有包,并且您自己的导出现在将被“忽略”,并且
  • 如果您是唯一一个导出它的人,您将与自己建立联系。

在这两种情况下,您都连接到其他人都在使用的同一个包,这正是您所需要的。

简而言之,您不必太担心这种情况,通常总是导入您导出的内容。大多数工具( bndApache Felix maven-bundle-plugin )实际上会为你做这件事。如果您手写 list ,您应该研究这些内容以使您的生活更轻松。

关于OSGI:只有在外部存在时才可以导入包,否则使用本地精简版?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4818967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com