我面临的问题是,应用程序正在由第三方维护的OSGi容器上部署.
我的捆绑包中有一些功能可以导入外部包,这些包可能可用,也可能不可用.对于捆绑包不可用的情况,我的捆绑包中存在客户端捆绑包(以帮助避免ClassNotFound异常).在另一种情况下,当存在捆绑包时,应该导入包.
这有可能吗?
提前致谢.
让我看看我是否正确理解了这个问题:假设我们正在谈论一些包foo.如果您环境中有人导出此包,则您希望完全导入该包.
[someone-else] --exp--> foo <--imp-- [you]
Run Code Online (Sandbox Code Playgroud)
如果没有人输出软件包,你可以自己复制它,在你所谓的"客户端软件包"中; 我真的不明白你的意思,但我想这意味着你想有条件地出口一些包,所以我们最终会遇到这种情况
[you] --exp--> foo
| ^
| |
-----imp------
Run Code Online (Sandbox Code Playgroud)
所以,你接通了自己.
我还认为你已经尝试foo自己导出包,但是当你这样做时,你无法使用包中的类与其他包进行通信foo.
如果上述情况正确,则可以使用默认的OSGi行为.您声明都导出和导入一个包,
Export-Package: foo
Import-Package: foo
Run Code Online (Sandbox Code Playgroud)
您现在将始终导出包,但OSGi解析机制将确保正确连接:
foo,您将连接到现有的包,并且您现在将"忽略"您自己的导出,并且在这两种情况下,您都可以连接到其他人正在使用的相同软件包,这正是您所需要的.
简而言之,您不应该过多地担心这种情况,并且通常总是导入您导出的内容.大多数工具(bnd,Apache Felix maven-bundle-plugin)实际上都会为你做这件事.如果你手工编写清单,你应该研究这些以使你的生活更轻松.
| 归档时间: |
|
| 查看次数: |
645 次 |
| 最近记录: |