捆绑包的资源如何与其他捆绑包(但不仅仅是一个捆绑包)共享?例如,我不想将图像或属性文件复制到所有捆绑包,而是想从一个地方访问它们。
我尝试使用 Fragment-Host,但无法指定多个捆绑包(至少我不知道如何),例如:
<!-rest of the pom-->
<instructions>
<Fragment-Host>
com.bundlehost
</Fragment-Host>
</instructions>
捆绑包的资源如何与其他捆绑包(但不仅仅是一个捆绑包)共享?例如,我不想将图像或属性文件复制到所有捆绑包,而是想从一个地方访问它们。
我尝试使用 Fragment-Host,但无法指定多个捆绑包(至少我不知道如何),例如:
<!-rest of the pom-->
<instructions>
<Fragment-Host>
com.bundlehost
</Fragment-Host>
</instructions>
正如 Dmytro 所说,您可以使用 OSGi API 方法来访问任何包中的资源。然而,更难的问题是:您如何知道从哪个捆绑包访问这些资源,以及您如何知道它们在捆绑包中的位置?
如果您只是做出假设或硬编码答案,那么您最终会得到一个非常脆弱的系统和捆绑包之间的隐藏耦合。然后,当有人将您的包部署到应用程序中但不包含资源包时,一切都会中断。这违背了模块化的观点。
您还可以使用正常的包导入和导出来确保资源位于使用包的类路径上。例如,请参阅使用 osgi 访问 bundle 内的公共属性文件。
您可以使用Bundle.getEntryPaths()和Bundle.getEntry()来获取捆绑资源。要阅读内容,请使用URL.openStream()