【发布时间】:2017-07-20 08:56:52
【问题描述】:
如何获取 manifest.mf 文件中定义的所有必需捆绑包,如 java org.osgi.framework.Bundle 对象?
我需要这些捆绑包用于 BundleWiring
【问题讨论】:
-
不确定你想要什么。你的意思是你已经在运行时部署了你的包并且想查看某个包需要的所有包?
-
类似的东西
如何获取 manifest.mf 文件中定义的所有必需捆绑包,如 java org.osgi.framework.Bundle 对象?
我需要这些捆绑包用于 BundleWiring
【问题讨论】:
您可以获得当前捆绑包的BundleWiring:
wiring = bundle.adapt(BundleWiring.class)
然后您可以从接线中获取所需的接线,例如用于包命名空间。
wires = wiring.getRequiredWires(...)
从电线中,您可以获得提供要求的 BundleRevision。
【讨论】:
OSGi 规范有专门针对这种情况的示例代码。
代码如下:
void printImports( Bundle A ) {
BundleWiring wA = A.adapt( BundleWiring.class );
for ( BundleWire wire :
wA.getRequiredWires(PACKAGE_NAMESPACE)) {
String pack = (String) wire.getCapability().getAttributes()
.get(PACKAGE_NAMESPACE);
Bundle bundle = wire.getProviderWiring()
.getBundle());
System.out.println(pack + " - " + bundle.getLocation());
}
}
取自https://osgi.org/specification/osgi.core/7.0.0/framework.wiring.html#i1748298
【讨论】: