如何将软件包添加到代码中的软件包导入中?我需要它,因为我使用依靠反射和需要其他软件包的库,而且我不想手动将这些软件包添加到MANIFEST.MF,对于我开发的每个软件包OSGi:以编程方式将导入添加到软件包中
回答
您不能。 导入包在解决阶段进行评估。 (阶段安装 - >解决 - >活动)。
您的代码在捆绑包处于活动状态时执行,因此添加导入包的时间太晚。
你可以做两件事情:
- ImportPackage的包,你要使用
- 使用动态ImportPackage属性指定的包,其分辨率可以推迟到执行时间
Dynamic-ImportPackage的使用是不鼓励的,因为它比OSGi试图修复的扁平类路径问题要好一些。 – SteveD 2009-10-09 17:06:15
除了Filippo的解决方案,您可以尝试反转依赖关系。 F.i.而不是调用和检查其他包,你可以让捆绑包做到这一点。另一种方法是使用捆绑追踪器并获取追踪的捆绑包的ClassLoader。有了这个类加载器,你可以“作为捆绑”,所以你不再需要Import-Package子句。
当我开始使用OSGi时,这是我提出的第一个要求之一。随着时间的推移,我意识到在几乎所有情况下,都有一个更清晰和更一致的解决方案。所以,想想看,如果你真的需要这种依赖。是否没有办法将其转换或抽象为创建通用解决方案?
如果没有任何帮助(作为最后的手段),您还可以创建(在内存中)一个包含核心包的片段作为主机,提供所需的导入。 BundleContext为您提供了一种从流中加载包的方法。然后,您必须更新并在您的主机捆绑包上调用refreshpackages(通过PackageAdmin服务)以获取更新的ClassLoader(意味着重新启动捆绑包)。但是,最后,您将可以访问所有包。
作为一个方面说明,我不会推荐通过调整import语句来操作主机捆绑包,然后更新...这会使您的捆绑包不确定,并且不会使用已签名的捆绑包。此外,这是对一切从一个OSGi的预期(想象一个不断增长的包随着时间的推移......你需要收缩在某些时候进口以及!!!)
干杯, 米尔科
我使用的一些第三方库使用我的bundle的类加载器来查找他们自己的类。这适用于WAR环境,而不是OSGi。我最终需要将这些软件包添加到我的软件包中。随着我开发越来越多的捆绑包,这变得乏味。 – IttayD 2009-10-14 10:33:05
好吧,所以它是这样的: 捆绑(3rdP) - >捆绑(我) - >捆绑(3rdP) 所以它就像记录。 3rdP是一些提供HelloWorld和特定LogFormatter的组件,其中“me”提供了日志API。 HelloWorld调用Logging API,这需要格式化程序来打印日志输出。 有几种方法可以解决这个问题: - 为所需的类加载器提供参数(在“我”中) - 提供带有外部查询服务的查询服务。贡献者 - 一个ClassTracker(追踪所有包并检查在哪里找到要加载的特定类 - 难以实施,版本控制在这里是个问题) – 2009-10-15 13:32:47
- 1. OSGI - 缺少导入的软件包= org.apache.commons.collections
- 2. 将软件包插入osgi失败
- 3. 以编程方式将按钮添加到导航栏
- 4. 如何以编程方式将导航栏添加到presentModalViewController?
- 5. 在Finder中以编程方式将文件夹添加到“Places”
- 6. 以编程方式将构件添加到构建中?
- 7. 以编程方式在Excel 2007中以编程方式添加条件格式
- 8. 如何以编程方式将Spin事件添加到DevExpress
- 9. 以编程方式将验证控件添加到asp.net页面
- 10. 以编程方式将控件添加到面板
- 11. 以编程方式将事件添加到日历
- 12. 以编程方式将权限添加到文件夹
- 13. 如何以编程方式将控件添加到窗体?
- 14. 如何以编程方式将构建文件添加到Xcode4?
- 15. 以编程方式实例化并将控件添加到UpdatePanel
- 16. 以编程方式将控件添加到WPF窗体
- 17. 以编程方式将签名添加到电子邮件
- 18. 以编程方式将AVI文件头添加到视频流
- 19. 将EclipseLink导入OSGI包persistence.xml未找到
- 20. 以编程方式添加到画布
- 21. 以编程方式添加Web部件
- 22. 以编程方式添加Azure组件
- 23. 以编程方式在log4j中记录特定软件包
- 24. 将外部软件包添加到Android
- 25. 以编程方式将SPFieldLookup添加到列表中?
- 26. 以编程方式将视图添加到LinearLayout中
- 27. 如何以编程方式将PSCmdlet添加到Powershell管道中?
- 28. 以编程方式将EditText添加到LinearLayout中android
- 29. 如何以编程方式将ListItems添加到ASP.NET中的DropDownList?
- 30. 以编程方式将UIButtons和UIImage添加到UIScrollview中
你似乎是在涉及OSGi时忽略了大局的一部分:依赖关系被明确声明。 – SteveD 2009-10-09 17:06:54