Import OSGi:以编程方式将导入添加到捆绑包
如何从代码内部将包添加到捆绑包的导入中?我需要它,因为我使用的库依赖于反射,并且需要其他包,我不想为我开发的每个包手动将这些包添加到MANIFEST.MF中,您不能这样做。 导入包在解析阶段进行评估。(阶段已安装->已解决->活动) 您的代码是在bundle处于活动状态时执行的,因此添加导入包太迟 你可以做两件事:Import OSGi:以编程方式将导入添加到捆绑包,import,osgi,bundle,Import,Osgi,Bundle,如何从代码内部将包添加到捆绑包的导入中?我需要它,因为我使用的库依赖于反射,并且需要其他包,我不想为我开发的每个包手动将这些包添加到MANIFEST.MF中,您不能这样做。 导入包在解析阶段进行评估。(阶段已安装->已解决->活动) 您的代码是在bundle处于活动状态时执行的,因此添加导入包太迟 你可以做两件事: 导入要使用的包 使用Dynamic ImportPackage属性指定其解析可以推迟到执行时的包 除了Filippo的解决方案,您还可以尝试反转依赖关系。F.i.您可以让捆绑包进行
- 导入要使用的包
- 使用Dynamic ImportPackage属性指定其解析可以推迟到执行时的包
Mirko不鼓励使用Dynamic ImportPackage,因为它比OSGi试图解决的平面类路径问题要好一点。在OSGi方面,您似乎忽略了全局的一个部分:依赖项是显式声明的。我使用的一些第三方库使用我的包的类加载器来查找它们自己的类。这在战争环境中工作得很好,而不是OSGi。我最终需要将这些包添加到我的包中。随着我开发越来越多的bundle,这会变得单调乏味。好吧,它类似于:bundle(3rdP)->bundle(me)->bundle(3rdP),所以它类似于日志记录。3rdP是提供HelloWorld和特定日志格式化程序的捆绑包,其中“me”提供日志API。HelloWorld调用日志API,反过来需要格式化程序打印日志输出。有几种方法可以解决这个问题:-为所需的类加载器(在“me”中)提供一个参数-使用ext.contributers提供一个查找服务-一个类跟踪器(跟踪所有捆绑包并检查在哪里找到要加载的特定类-很难实现,版本控制在这里是一个问题)