我有一个带有自定义 Main 类的自定义 jar,它启动 OSGi 框架并安装/启动捆绑包。这个主 jar 还包括一个属性文件。
目标:我有一个包 A,它应该以某种方式获取主 jar 的这个属性文件的属性。
我的第一次尝试是在包 A 中定义一个组件(使用 Apache Felix SCR/声明式服务)并在其激活方法中检索属性。到目前为止,这有效,我得到了@Property-annotation 中指定的默认值。
但是我现在如何将属性文件的属性传递给这个组件呢?
将参数传递给 OSGi 应用程序 提到使用 Config Admin,但我如何在 Main 类中使用它?
- Config Admin 在一个包中,而不是在主 jar 中,并且这些包没有按任何特定顺序安装
- Main 类对它安装的包一无所知,更不用说特定的 service.pid。
更新:
我现在正在尝试@vizier 建议的方法(它不使用 Config Admin,因此没有提到的问题):
- 在主jar(系统包)中定义一个服务接口
- 提供一个实现,它读取属性文件(属性文件在同一个jar中)
- 导出包含此服务接口的包 X
- 包 A 然后可以导入包 X 并例如使用声明性服务引用服务
但在我的捆绑包 A 中,我得到:
org.osgi.framework.BundleException: Unresolved constraint in bundle <bundle A> [14]: Unable to resolve 14.0: missing requirement [14.0] osgi.wiring.package; (&(osgi.wiring.package=<package X>)(version>=0.1.0)(!(version>=1.0.0)))
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3826)
at org.apache.felix.framework.Felix.startBundle(Felix.java:1868)
at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1191)
at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:295)
at java.lang.Thread.run(Thread.java:722)
即使Manifest文件中的Export-Package添加了一些自定义包,系统捆绑包是否只导出osgi包?或者出了什么问题?